JavaScript 事件点击触发了两次

Posted

技术标签:

【中文标题】JavaScript 事件点击触发了两次【英文标题】:JavaScript event click triggered twice 【发布时间】:2011-04-25 06:52:55 【问题描述】:

我正在测试创建 LI 元素,每个元素内都有一个简单的超链接。 所有的 LI 元素都是使用 jQuery.append 动态生成的

然而—— 1. 如果元素是作为 CALLBACK 函数 (ASYNCHRONOUS) 的一部分创建的——在调用 jQuery AJAX 之后——一切正常 2. 如果元素是同步创建的——一旦点击就会触发两个点击事件。

下面是三个相关的javascript函数?注意有两个硬编码的超链接 1. 标记为 SYNC 2. 标记为 A-SYNC。

有什么想法吗?

    MCRM.Handler.accounts_index = function()
    console.log("MCRM.Handler.accounts_index");
        MCRM.Account.all(function(r)
            MCRM.Handler.accounts_list(r);
            preventDefaultLink();
        );
    ;



    MCRM.Handler.accounts_list = function(r)
          console.log("MCRM.Handler.accounts_list");
          $('#listAccount').append('<li class="arrow"><a href="app/views/accounts/show.html">A-SYNC</a></li>');
          for(var  i = 0; i < r.length; i ++) 
            record = r[i];
            $('#listAccount').append('<li class="arrow">' + MCRM.AccountsHelper.account_link(record) + '</li>');
          
    ;

    MCRM.Account.all = function(success_callback2, options)
            var accounts;
            console.log("MCRM.Account.all");
            $('#listAccount').append('<li class="arrow"><a href="app/views/accounts/show.html">SYNC</a></li>');
            var soap = "",
            url = MCRM.SIEBEL_URL + "/eai_enu/start.swe?SWEExtSource=WebService&SWEExtCmd=Execute&UserName=" + MCRM.SIEBEL_USER + "&Password=" + MCRM.SIEBEL_PWD
            soap = MCRM.XML_MY_ACCOUNTS;   
            jQuery.ajax(
                type: "post", url: url, contentType: "text/xml", data: soap, dataType: "xml", processData: false,
                success: function( doc, status)
                  console.log("SUCCESS");
                  var json = jQuery.xml2json(doc);
                  //var account = json.Body.SiebelAccountQueryByIdResponse.SiebelMessage.ListOfAccountInterface.Account;
                  MCRM.Account.accounts = json.Body.Siebel_spcAccount_SiebelAccountQueryByExample_Output.ListOfAccountInterface.Account;
                  success_callback2(MCRM.Account.accounts);
                  //MCRM.screen.account_detail.setValue(account.Name + "<br>" + account.MainPhoneNumber);
                ,
              );

;

【问题讨论】:

【参考方案1】:

我发现我的问题是由于 防止默认链接();

包含“click”事件的事件侦听器被调用了两次。我只知道附加它两次会影响双重事件。

【讨论】:

以上是关于JavaScript 事件点击触发了两次的主要内容,如果未能解决你的问题,请参考以下文章

解决label 和checkbox点击事件触发两次问题

Lambda 函数在 DynamoDB 事件上触发了两次

关于jQuery中动态生成的点击事件触发两次的讨论

为 kendo ui Combobox 触发了两次更改事件

jQuery 模糊事件在 Chrome 中触发了两次

在我的 iOS 中单击按钮时,事件触发了两次。应用程序