2012-07-13 1 views
0

я связываю с помощью живого оператора функции щелчка на Li-элемент:запрос JQuery Ajax выполняется слишком часто

$(".UListView li input.iconbutton.click").live("click", function(e){ 

e.preventDefault(); 
[...] 
$.get("ajax/categorylist.php?appendcategories=true&parentcat="+currentid+"&side="+side, function(data){ 
[...] 
}); 

}); 

В почти 90% случаев оно выполняется один раз, и все в порядке. Но иногда Ajax запрос выполняется 2 или даже больше раз:

Это выход из поджигатель: (Выполняемые два раза)

jquery.min.js (Zeile 4) 
GET htt-p://localhost/request.php?.... 200 OK  11ms 
jquery.min.js (Zeile 4) 
GET htt-p://localhost/request.php?.... 200 OK  19ms 

Это суммарно разбивает мое расположение, потому что все элементы добавляются в худший случай 6x в DOM.

Кто-нибудь знает, в чем причина такого поведения? Или хорошая идея исправить код «добавить к DOM» выполняется несколько раз.

+0

Я заметил, что IE иногда это делает и либо связан с регистрацией вашего события дважды, либо если у вас несколько загруженных файлов jquery - например, ненавязчивый. С консоли, посмотрите на события, которые подключены так: '$ (" # myItem "). Data ('events')' – anAgent

+0

Черт, я не видел регулярности. После закрытия окна цвета события щелчка были уничтожены. Я не знаю, почему это иногда случается, когда вы открываете colorbox в первый раз, но все ваши комментарии togehter решают! Спасибо – simonheinrich

ответ

0

добавить e.stopPropagation(); в свой код, а также return false; до конца события щелчка

+0

Спасибо, теперь он работает лучше, но не решает проблему полностью. Я забыл сказать: эта причуда появляется только тогда, когда запрос ajax отправляется в colorbox. И когда он выполняется дважды, весь следующий запрос в colorbox также выполняется дважды, пока я не закрою colorbox и не обновляю страницу. – simonheinrich

+0

Не могли бы вы предоставить jsfiddler? –

0

Я надеюсь, что вы не являетесь обязательными для живого события twice..in этого случая использования этого ..

$(".UListView li input.iconbutton.click").die("click"); 
    $(".UListView li input.iconbutton.click").live("click", function(e){ 
.. 
.. 
.. 
}); 

или иногда даже если нажать кнопку один раз, событие вызывается дважды ..

в этом случае после нажатия кнопки скрыть кнопку первым, чтобы предотвратить множественные представить ..

$(".UListView li input.iconbutton.click").live("click", function(e){ 

$(".UListView li input.iconbutton.click").hide(); 
.. 
.. 
.. 
});