У меня есть эти функции:JQuery перезаписать .click события внутри мыши
TargetWorksheet.toggle_child_locations = function(id){
$("#location-children-"+id).slideToggle("slow");
}
TargetWorksheet.get_child_locations = function(id, lvl){
//Ajax grab all children and targets, and display children
$.get('child_locations',{ location_id: id, level: lvl}, function(data){
$("#location-children-"+id).append(data);
TargetWorksheet.toggle_child_locations(id);
});
//Change onClick to just toggle since child data will now be loaded
$("#location-toggle-"+id).click(function(){
TargetWorksheet.toggle_child_locations(id);
});
}
и этот вызов:
$(function(){
TargetWorksheet.toggle_child_locations(2);
$("#location-toggle-2").click(function(){
TargetWorksheet.get_child_locations(2,1);
});
});
Так я придаю событие щелчка к моему '+' ссылке (# местоположения-переключатель -2), который переключает дочерние данные. При первом щелчке я хочу сделать ajax-вызов для извлечения дочерних данных, но тогда я просто хочу перезаписать .click в # location-toggle-2, чтобы теперь он просто переключался и не вызывал вызов ajax , Вышеприведенный код не работает, он, похоже, не перезаписывает .click и каждый раз вызывает аякс-вызов.
Кто-нибудь знает, как я могу перезаписать событие .click элемента? Я также пробовал $("#location-toggle-"+id).click(TargetWorksheet.toggle_child_locations(id));
И по какой-то причине он просто переделывал рекурсивно.
Мысли?
Лучше использовать 'unbind (" click ");', это отменит только тип события 'click'. Это особенно полезно при использовании виджетов JQueryUI, таких как 'button()', в этом случае вы просто хотите отменить щелчок и сохранить другие события, такие как 'hover' и т. Д. –
Не забывайте о цепочке. Я обычно делаю это: '$ (" # myElement "). Off (" click "). On (" click ", handler);' Это делает код немного чистым – Nick