Вы видите это поведение, потому что событие dbclick
все еще запущено после добавления элемента.
Другими словами, при нажатии на элемент во втором списке событие второго клика запускается примерно в то же время, что и событие dbclick
. Чтобы обойти это, вы могли бы сравнить временные метки событий, чтобы определить, произошло ли второе событие click
событие dbclick
после его добавления.
В приведенном ниже примере переменная lastClickTimeStamp
обновляется каждый раз при запуске события click
. Чтобы предотвратить странное поведение, которое вы видите, проверяется, был ли запущен последний щелчок перед запуском события dbclick
.
Updated Example
var lastClickTimeStamp = 0;
$('#list1').on('dblclick', '.item', function(event) {
if (event.timeStamp > lastClickTimeStamp) {
$('#list2').append(this);
}
});
$('#list2').on('click', '.item', function(event) {
lastClickTimeStamp = event.timeStamp + 100;
$('#list1').append(this);
});
Боковые ноты:
- Я добавил
100ms
для учета возможных приближений временных меток. Возможно, отметки времени события могут варьироваться всего лишь от 1ms
.
- Я использовал делегирование событий, чтобы избежать вложенных прослушивателей событий (хотя вы уже знали об этом).
- Поскольку вы используете jQuery версии 1.6.4, вы должны использовать метод
.delegate()
вместо метода .on()
.
Как я отметил в комментариях, вы можете в качестве альтернативы добавить элемент в первый список с задержкой. При этом делегированное событие dbclick
не запускается.
Updated Example
$('#list1').on('dblclick', '.item', function(event) {
$('#list2').append(this);
});
$('#list2').on('click', '.item', function(event) {
setTimeout(function() {
$('#list1').append(this);
}.bind(this), 5);
});
Я чувствую, что оба эти решения относительно хака, но, тем не менее, они, кажется, работают.
Еще одна ошибка, которую я нашел: продолжайте нажимать на один элемент в своем первом списке, и ваши элементы списка циклируются, как беговая дорожка. –
проверить это может быть полезно http://www.quirksmode.org/js/events_mouse.html –
@ Дрю Кеннеди, все, что происходит в первом списке, не важно :-) Я знаю об этом. Проблема заключается только в том, что события двойного щелчка активируются даже при нажатии двух разных элементов DOM. – JREN