2012-10-18 6 views
5

У меня есть 2 списка, которые можно сортировать (# sortable1 и # sortable2), и я создал 2 click() функции для обработки каждого события события сортировки элементов ($("#sortable1 li").click(function(){}) и $("#sortable2 li").click(function(){})).jQuery UI sortable click event

Я перемещаю 1 элемент из # sortable1 (например: Sort1 Item 2) в список # sortable2. Проблема в том, когда элемент переместился в # sortable2, и я пытаюсь щелкнуть его, запускаемый mouseevent равен $("#sortable1 li").click(function(){}), а не $("#sortable2 li").click(function(){}).

Любое предложение, поэтому, если я перемещаю элемент из sortable1 в sortable2 и нажимаю на этот элемент, элемент триггера $("#sortable2 li").click(function(){})?

DEMO: http://jsfiddle.net/yosafatade/zX3pX/12/

ответ

3

вам нужно использовать on() увидеть обновление http://jsfiddle.net/zX3pX/13/

+0

супер удивительным. тысяча благодаря вам. – yosafatade

+2

live() устарел - используйте .on() – oshikryu

+0

Если у вас есть элементы, которые можно щелкнуть в Sortable, также добавьте опции 'helper: 'clone',' в Sortable Options, чтобы предотвратить запуск события click при перетаскивании/сортировке. http://stackoverflow.com/questions/947195/jquery-ui-sortable-how-can-i-cancel-the-click-event-on-an-item-thats-dragged –

0

я бы, вероятно, добавить класс к каждому li пункту какой таблице он находится в Например

<li class='sort1'></li> 
.

Затем, когда вы проверите .click на $(".sort1"), и при перемещении объекта запустите

$(this).removeClass("sort1"); 
$(this).addClass("sort2"); 
+0

Я пробовал это раньше, но проблема все еще возникает. ответ от @DavidMichaelHarrison и CrimsonChin - соответствующий ответ. – yosafatade

2

Я хотел бы использовать в качестве .on.delegate был заменен. Таким образом вы присоединяете событие к списку, а не к элементу списка.

Используйте это:

$("#sortable1").on("click", "li", function(){ 
     $("#testClickSort1").html($(this).html()); 
}); 

$("#sortable2").on("click", "li", function(){ 
     $("#testClickSort2").html($(this).html()); 
}); 

скрипку: http://jsfiddle.net/qkCcS/