我有这些功能:
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);
});
}
Run Code Online (Sandbox Code Playgroud)
这个电话:
$(function(){
TargetWorksheet.toggle_child_locations(2);
$("#location-toggle-2").click(function(){
TargetWorksheet.get_child_locations(2,1);
});
});
Run Code Online (Sandbox Code Playgroud)
所以我将点击事件附加到我的"+"链接(#location-toggle-2),该链接切换子数据.在第一次单击时,我想进行ajax调用以检索子数据,但是我只想覆盖#location-toggle-2上的.click,以便它现在只是切换,并且不会进行ajax调用.上面的代码不起作用,它似乎没有覆盖.click,并且每次都进行ajax调用.
有谁知道如何覆盖项目的.click事件?我也尝试
$("#location-toggle-"+id).click(TargetWorksheet.toggle_child_locations(id));
过,由于某种原因,它一直在递归地翻转.
思考?
Dav*_*ard 67
你唯一缺少的是每次调用时都会添加一个新的处理程序,而不是覆盖现有的处理程序..click()
您可以$("#location-toggle-"+id).unbind()在添加新元素之前清除该元素上的处理程序,它应该按预期工作.