Déclenchement de la Souris en faisant Glisser dans l'INTERFACE utilisateur de jQuery
À l'aide de jQuery 1.2.x et jQuery UI 1.5.x, on a pu déclencher glisser manuellement comme suit:
jQuery("#myDiv").mousedown(function(ev) {
target = jQuery(ev.target);
if (target.hasClass("drag-me")) {
target.draggable({
helper: "clone",
start: function()
{
console.log("drag start");
},
stop: function()
{
jQuery(this).draggable("destroy");
}
}).trigger("mousedown.draggable", [ev]);
} });
Il est appliqué sur le code HTML suivant:
<div id="myDiv">
<div class="drag-me"></div>
<div class="drag-me"></div>
<div class="drag-me"></div>
<div class="drag-me"></div>
<div class="drag-me"></div>
<div class="drag-me"></div>
<div class="drag-me"></div>
</div>
C'était un moyen pratique d'appliquer en faisant glisser les éléments à l'intérieur d'un conteneur qui a ses enfants a changé de façon dynamique. J'aime l'appeler "faites glisser la délégation".
Cependant avec la version de jQuery 1.3.x & jQuery 1.6+, le script ci-dessus cessé de travailler. À l'aide de jQuery 1.3.2 & jQuery UI 1.7.1 renvoie un message d'erreur "trop de récursivité".
Comment puis-je déclencher glisser manuellement? Des suggestions?
OriginalL'auteur Raybiez | 2009-06-05
Vous devez vous connecter pour publier un commentaire.
Les réponses ci-dessus semblent être trop compliqué.
OriginalL'auteur John Milmine
J'cas où vous n'êtes pas à l'aide de jQuery 1.4 (et donc ne pas avoir délégué() la méthode), il y a une autre solution.
ce que vous avez à faire pour arrêter la recurssion de produit est appel stopPropagate() sur les événements mousedown pour tous les éléments:
Également modifier votre code ressemble à ceci (notez le stopPropagation() appel au bas):
Cela devrait résoudre votre interminables recurssion. (au moins il a fait pour moi dans une situation similaire)
OriginalL'auteur nivcaner
Il s'avère beaucoup plus simple que vous attendez. En regardant l' .trigger() la méthode la documentation, aucune mention n'est faite sur le fait que l'on peut aussi fournir l'original de l'événement comme un argument, et pas seulement une représentation de chaîne de l'événement.
Ainsi, on peut atteindre délégué glisser de manière plus efficace comme suit:
La solution idéale aurait été de la bibliothèque d'INTERFACE utilisateur d'avoir une méthode pour effectuer ce type de délégation en mode natif pour les éléments dynamiques....
Noter que ceci est applicable à jQuery 1.4.2 & l'INTERFACE utilisateur de jQuery 1.7.2
OriginalL'auteur Raybiez
Si vous pouviez poster un ensemble de code de l'échantillon (avec le html & les balises de script avec chômé versions), je pourrais probablement le point de ce qui est mauvais et/ou vérifier le problème ....
Cependant, je ne suis pas sûr que vous voulez faire passer un tableau de 1 objet [ev] comme deuxième paramètre de déclenchement d'appel.
La la documentation dit "Enfin, vous pouvez passer un littéral d'objet avec les données. Il sera copié dans un véritable jQuery.Objet de l'événement. Notez que vous devez spécifier un attribut de type dans ce cas."
Pouvez-vous vérifier qu'il (doit être travaillé avant) comme vous l'avez écrit et/ou éventuellement coller du code plus ou URL de la page concernée? Je serais heureux de prendre un autre regard sur elle.
Espère que ça aide. 🙂
Edit: en Prenant un autre regard sur elle. Il fait exactement ce que vous lui demandez. Sur l'événement mousedown, vous faire certaines choses, et puis à la fin par le déclenchement d'un autre événement mousedown qui permettra de faire certaines choses, et puis une autre cause de la souris vers le bas de l'événement et ainsi de suite ... et alors ...
Vous avez créé une boucle infinie.
Pourquoi ne pas simplement les divs tous déplaçable lors du chargement de la page plutôt que quand ils sont d'abord cliqué? Ne serait-ce pas éviter ce problème?
Également jeter un oeil à ce post, et je serais très intéressé de voir un peu de code utilisé pour travailler. Comme l'a écrit, je ne suis pas sûr que je comprends la séquence de la façon dont le code d'émuler un "glisser" de l'événement - composé de mousedown, mousemove, la souris et des événements. Laissez-moi savoir. Merci!
OriginalL'auteur Keith Bentrup
les autres réponses ne fonctionne pas pour moi, je l'ai fait à l'aide de jquery ui simuler plugin
https://github.com/jquery/jquery-ui/blob/9e8e339648901899827a58e5bf919f7dda03b88e/tests/jquery.simulate.js
OriginalL'auteur dav