J'utilise jQuery Sortable. J'ai la configuration HTML comme ceci:
<ul id='plan'>
<li class='item'>1</li>
<li class='item'>2</li>
<li class='item'>3</li>
<li class='item'>4</li>
</ul>
Je souhaite déplacer par programme un <li>
à une position différente. Je peux y parvenir avec le JS suivant:
$("#plan li:eq(1)").insertAfter($("#plan li:eq(2)"));
Cela fonctionne bien, sauf qu'il ne déclenche pas les événements triables comme les modifications ou les mises à jour. J'ai une fonction qui s'exécute sur l'événement de mise à jour du triable mais déplacer le li avec JS ne déclenche pas cela.
Quelqu'un sait-il comment déclencher l'événement de mise à jour triable?
$("selector").trigger("sortupdate");
vous devrez peut-être passer comme deuxième argument une fonction où mettre dans l'événement et l'interface utilisateur, l'événement n'est pas aussi important que l'interface utilisateur
le code interne du widget triable pour le déclenchement d'événements ressemble à ceci
this._trigger("update", event, this._uiHash(this));
Donc, vous voudrez peut-être faire après
function triggerUpdateFor(selector) {
var widget = $(selector).sortable("widget");
if (widget) widget._trigger("update", null, widget._uiHash(widget));
}
option
du triable (pour récupérer ses rappels)Comme chaque rappel d'événement est défini comme une option du widget triable, il peut être récupéré comme tel en appelant la méthode d'option pour l'option de rappel d'événement correspondante (cet exemple utilise le update
rappeler):
$('#plan').sortable({
update: function(event, ui) {
// Do something...
}
});
$('#plan').sortable('option', 'update'); // returns function
Le rappel de mise à jour attend deux paramètres , le event
et un ui object
. event
peut être défini sur null et ui object
doit être défini avec toutes les propriétés de votre update callback
attend:
$('#plan').sortable('option','update')(
null,
{
item: $('<li>new item</li>').appendTo($('#plan'))
}
);
Cela fonctionne pour tous les rappels d'événements que vous avez définis (c'est-à-dire receive
, change
etc.).
La méthode trigger
accepte des paramètres supplémentaires, donc si vous avez besoin du paramètre ui
, vous devrez le transmettre vous-même. Mais vous voulez généralement juste la cible ui.item
, et dans ce cas, vous savez ce que c'est:
var sortupdate = function (event, ui) {
// do something with ui.item
};
var $plan = $("#plan");
$plan.sortable({
update: sortupdate
});
$plan.on("sortupdate", sortupdate); // sortupdate is not automatically bound
var $item = $("#plan li:eq(1)");
$item.insertAfter($("#plan li:eq(2)"));
$plan.trigger("sortupdate", { item : $item });
Démo:
Encore plus simple:
$('#plan').sortable('refresh');