Fondamentalement, j'utilise Sélection de la fonctionnalité sélectionnable de JQuery UI sur un J'ai formulé une solution , qui consiste à vérifier la position du curseur par rapport à la position et à la largeur de l'UL pour voir si le curseur est sur la barre de défilement et, le cas échéant, arrêtez la propagation de l'événement «Démarrer» sélectionnable, mais malgré le respect de la conditionnelle lorsque Cela devrait être, ni de retourner fausse ni d'arrêt de la progression de l'événement semble empêcher JQuery de progresser à travers les événements sélectionnables. P> Voici ce que j'ai pour la jQuery ul code> , mais l'UL aura souvent souvent une barre de défilement et cette barre de défilement devient inutilisable dans les navigateurs WebKit depuis que lorsque vous essayez de cliquer dessus pour l'accrocher, le lasso pour la fonctionnalité sélectionnable est tracés à la place.
.Selectable code>
Démarrer CODE> EVENT: P>
start: function(event, ui) {
var t = event.target;
var cutoff = t.scrollWidth + t.offsetLeft
if (event.clientX > cutoff)
{
console.log('NO!');
console.log(event.type);
//overkill
event.stopPropagation();
event.stopImmediatePropagation();
if (event.stopPropagation) {
event.stopPropagation();
} else {
event.cancelBubble = true;
}
return false;
}
}
3 Réponses :
Le Vous verrez dans les docs JQuery pour Notez que cela n'empêchera pas d'autres
des gestionnaires sur le même élément de
courir. p>
blockQquote> donc, tandis que basé sur le page de démonstration sélectionnable , cet extrait de code annule avec succès la bulle: p> Notez que vous devez ajouter Votre gestionnaire d'événements sur l'objet Démarrer CODE> L'événement est un faux tressant. Ce que vous devez faire est de joindre votre code pour annuler une éventuelle bouillonnement directement dans l'événement code> MouseDown code> du
UL code> et assurez-vous que votre gestionnaire d'événements est exécuté en premier.
event.stoppropagation code> cette petite ligne: p>
événement.stoppropagation code> arrêtera l'événement bulling plus en haut de la DOM, il n'arrête pas les autres gestionnaires d'événements attacher au
ul code > être appelé. Pour cela, vous avez besoin de
event.stopimmediatepropagation code> pour arrêter le gestionnaire d'événements (code> sélectionnable p>
ul code> avant em> vous exécutez la fonction
.) code> Fonction de configuration afin de vous faufiler et de faire sauter la bulle d'événement en premier. p> p>
Bonne analyse. Notez que l'instruction renvoyer false code> encapsulera également
evt.stoppropagation () code>. Je ne dois pas nécessairement faire les deux.
Merci beaucoup pour votre solution, cela est parfaitement logique que vous m'avez expliqué la nature de la structure des événements .selectables et de l'utilisation correcte de stopprogation et d'arrêt de stopimédiediate et cela fonctionne un régal! Merci encore!
J'ai soumis ceci au suivi de bugs JQuery: dev.jQueryui.com/ticket/4441 J'espère qu'ils le répareront.
Cela m'a aidé à arrêter un événement de clic à partir d'ouvrir un modal lorsque j'ai cliqué sur N a glissé un élément redimensionnable JQuery-UI. THX!
La réponse de Sam C n'a pas fonctionné pour moi, probablement à cause de la façon dont je me suis positionné #selectable. C'est ce que j'ai utilisé: où $ .getscrollbarwidth () vient de ici p> p>
Voici une légère variation de la solution $(function() {
$("#selectable").mousedown(function (evt) {
if ($(evt.originalEvent.target).hasClass('ui-dialog')) // <--- variation
{
evt.stopImmediatePropagation();
return false;
}
return true;
});
$("#selectable").selectable();
});
Vous vouliez probablement dire si ($ (evt.originalevent.target) .hasclass ("ui-sélectionnable")) code>. C'est ce qui a fonctionné pour moi avec un Todbon comme le conteneur (TR sont les SEELECES).
Lorsque vous dites, "le lasso pour la fonctionnalité sélectionnable est tracés à la place", quel est ce lasso que vous parlez? Pouvez-vous prendre une capture d'écran?