首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么这个jQuery ajax点击事件会多次触发?

为什么这个jQuery ajax点击事件会多次触发?
EN

Stack Overflow用户
提问于 2011-05-25 15:28:06
回答 8查看 59.8K关注 0票数 24

我试过解除click事件的绑定,但它有时会触发两次,有时会触发5次!现在有点受够了!

来自modal.asp的代码

代码语言:javascript
复制
$("input[name=add_associate]").live("click",function(){
    var addassociateID = $(this).attr("id")

    $.ajax({
       type: 'POST',
       url: '/data/watchlist_save.asp',
       data: {m : 'share_watchlist_add', watchListID : <%=WatchListID%>, a : addassociateID},
       async:true,
       success: function(data) {
           $(".associate_users").load("/data/sub_watch_members.asp?watchListID=<%=WatchListID%>",
           {cache:false},function() {
               $(".search_note").html(data)         
               $(this).unbind('click').bind('click',handler);                                                                                                
           })
       },
       error: function(data){
           $(".search_note").html(data)
       }
    });     
})

更新

基本上,我将以下代码调用到.associate_users

代码语言:javascript
复制
<div id="associate_list">
    <div class="associate_record">
        <div class="left" style="padding:8px;"><img src="../imgs/nopic-m.png" style="width:30px;height:30px;" class="img_border" /></div>
        <div class="left" style="padding-top:15px;">5)Neil Burton</div>
        <div class="right" style="padding-top:10px;margin-right:5px;"><input type="button" class="btn-blue" name="add_associate" id="890" value="Add"></div>
        <div style="clear:both;"></div>
    </div>
    <div style="clear:both;"></div>
</div>

更多信息

只有当我触发事件,关闭模式对话框,然后使用不同的watchListID重新打开它时,才会发生这种情况

数据结构:

  • main.asp:LOADS > jquery包含上述
  • modal.asp:+此页面上的两个div,分别为panel1.asp和panel2.asp data...
  • panel1.asp:包含above...
  • panel2.asp:modal.asp不包含任何相关的.纯HTML.
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-05-31 23:34:34

我现在已经解决了这个问题,我正在使用

代码语言:javascript
复制
$(document).ready

在加载的ajax内容中...

代码语言:javascript
复制
<script src="/js/jquery-ui.js"></script>

所以我假设它是"live“函数的两倍!

非常感谢您的回复。

票数 7
EN

Stack Overflow用户

发布于 2011-05-25 16:21:23

注意你的分号,确保每个命令都以分号结尾,这样以后就不会头疼了。

对于live()绑定的事件,必须通过调用die()来解除绑定。它具有与unbind()相同的参数。看一看documentation

代码语言:javascript
复制
function ajaxHandler(){
    var addassociateID = $(this).attr("id");
    var $this = $(this);
    $this.die('click');

    $.ajax({
        type: 'POST',
        url: '/data/watchlist_save.asp',
        data: {m : 'share_watchlist_add', watchListID : <%=WatchListID%>, a : addassociateID},
        async: true,
        success: function(data) {
            $(".associate_users").load("/data/sub_watch_members.asp?watchListID=<%=WatchListID%>",{cache:false},function(){
                $(".search_note").html(data);
                $this.bind('click',handler);
            });
        },
        error: function(data){
            $(".search_note").html(data);
            $this.live('click', ajaxHandler);
        }
    });     
}

$("input[name=add_associate]").live("click", ajaxHandler);

编辑:忘记添加一些要点。就像@stefan建议的那样,你必须在点击处理程序中取消绑定实时事件,并在出错时重新绑定它。

还要确保将this对象保存在一个变量中,因为它没有指向ajax回调函数中的DOM元素。或者,您可以在ajax请求上使用context属性,检查documentation

票数 17
EN

Stack Overflow用户

发布于 2013-07-26 14:24:10

正如我所看到的,你所要做的就是绑定事件一次,然后终止它。最新的jQuery版本有一个.one()方法,它只绑定事件一次。

示例:

代码语言:javascript
复制
$('#myDiv').one('click', function() {
    alert('clicked once...');
});

下次单击时,单击事件将不会触发。

更多信息请访问http://api.jquery.com/one/

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6120943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档