2009-03-10 6 views
20

У меня есть эти функции: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)); И по какой-то причине он просто переделывал рекурсивно.

Мысли?

ответ

62

Единственное, что вам не хватает там, что использование .click()добавляет новый обработчик каждый раз, когда она называется, не перезаписывает существующий.

Вы можете использовать $("#location-toggle-"+id).unbind(), чтобы очистить обработчики на этом элементе перед добавлением нового, и он должен работать так, как вы ожидаете.

+8

Лучше использовать 'unbind (" click ");', это отменит только тип события 'click'. Это особенно полезно при использовании виджетов JQueryUI, таких как 'button()', в этом случае вы просто хотите отменить щелчок и сохранить другие события, такие как 'hover' и т. Д. –

+5

Не забывайте о цепочке. Я обычно делаю это: '$ (" # myElement "). Off (" click "). On (" click ", handler);' Это делает код немного чистым – Nick

Смежные вопросы