【问题标题】:jQuery live click fires more than oncejQuery live click 触发不止一次
【发布时间】:2011-04-02 13:47:37
【问题描述】:

我有这个代码用于 ajax 搜索点击页面:

$.ajax({
    url: "ClientsList.asp",
    type: "POST",
    data: "name=" + Name + "&org=" + Org + "&job=" + Job + "&type=" + Type,
    success: function(msg){
        $("#SRP").html(msg);
        $("#Loading").fadeOut("noraml",function(){
            $("#SRP").fadeIn();
        });

    }
});

然后在加载的内容中,我有需要捕获的复选框,所以我用这段代码来做

$(".SearchResultSelectBox").live("click", function(event) {
    $(this).is(":checked") ? DoCheckSelect($(this).attr("rel")) : unDoCheckSelect($(this).attr("rel"));
});

我第一次从 ajax 搜索并获取结果页面时,复选框工作得很好。我第二次使用搜索时,我的每一次实时点击都会翻倍。我第三次使用 ajax 时,每次实时点击都会增加三倍等等......

我试过“return false”,但它可以工作,但复选框没有被点击

可以做什么?

没关系!我有一个错误,我在第一个函数里面有第二组函数,所以每次我创建搜索函数时,我都会再次为实时点击创建内部函数

【问题讨论】:

  • 您是否不止一次致电live()?如果没有,请在 click() 例程中尝试 event.stopPropagation();
  • 那么你不止一次调用它。轻松搞定。
  • 如果您每次加载内容时都调用live() 函数,那么您就错过了live 的要点。您应该只注册一次实时事件,然后每当您刷新 html 时,它就会通过它。
  • 或者您是在循环中声明它还是在可能多次触发的事件处理程序本身中声明它?

标签: jquery click live


【解决方案1】:

可以尝试使用

解除绑定('点击');

为每个ajax请求重新绑定一次

【讨论】:

    【解决方案2】:

    试试

    event.stopPropagation();
    
    $(".SearchResultSelectBox").live("click", function(event) {
        $(this).is(":checked") ? DoCheckSelect($(this).attr("rel")) : unDoCheckSelect($(this).attr("rel"));
        event.stopPropagation();
    });
    

    【讨论】:

      猜你喜欢
      • 2021-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-24
      • 1970-01-01
      相关资源
      最近更新 更多