Событие jQuery перезаписать .click внутри клика - PullRequest
21 голосов
/ 10 марта 2009

У меня есть эти функции:

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);
  });
});

Поэтому я прикрепляю событие click к моей ссылке '+' (# location-toggle-2), которая переключает дочерние данные. При первом щелчке я хочу сделать ajax-вызов для извлечения дочерних данных, но затем я просто хочу перезаписать .click на # location-toggle-2, чтобы он теперь просто переключался и не делал ajax-вызов , Приведенный выше код не работает, он, кажется, не перезаписывает .click и каждый раз вызывает ajax.

Кто-нибудь знает, как я могу перезаписать событие .click элемента? Я тоже пробовал $("#location-toggle-"+id).click(TargetWorksheet.toggle_child_locations(id)); И по какой-то причине он продолжал переключаться снова и снова.

Мысли

1 Ответ

66 голосов
/ 10 марта 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...