Ich habe diese Funktionen:jQuery .click Ereignis überschrieben innerhalb Klick
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);
});
}
und diesen Aufruf:
$(function(){
TargetWorksheet.toggle_child_locations(2);
$("#location-toggle-2").click(function(){
TargetWorksheet.get_child_locations(2,1);
});
});
So lege ich ein Click-Ereignis auf meine '+' Link (# location-Toggle -2), die untergeordnete Daten schaltet. Beim ersten Klick möchte ich einen Ajax-Aufruf durchführen, um die Kinddaten abzurufen, aber dann möchte ich einfach den .click auf # location-toggle-2 überschreiben, so dass er jetzt einfach umschaltet und den Ajax-Anruf nicht ausführt . Der obige Code funktioniert nicht, er scheint den .click nicht zu überschreiben und macht den Ajax jedes Mal.
Weiß jemand, wie ich das .click Ereignis eines Artikels überschreiben kann? Ich habe auch versucht, $("#location-toggle-"+id).click(TargetWorksheet.toggle_child_locations(id));
Und es einfach schaukelte immer wieder rekursiv aus irgendeinem Grund.
Gedanken?
Es wäre besser, 'unbind (" click ");' zu verwenden, dies löst nur den Ereignistyp 'click'. Dies ist besonders nützlich, wenn Sie JQueryUI-Widgets wie 'button()' verwenden. In diesem Fall möchten Sie nur den Klick loslassen und andere Ereignisse wie 'Hover' usw. beibehalten. –
Vergessen Sie nicht die Verkettung. Normalerweise mache ich das: '$ (" # myElement "). Off (" click "). On (" click ", handler);' Dies macht den Code ein wenig sauberer – Nick