Jquery点击代码被多次调用

时间:2014-02-25 08:04:50

标签: jquery click

我尝试将我的代码添加到小提琴中,它在那里工作正常,请尝试直接在我的网站上进行分析。 这是页面:http://cacharro.ole32.com/shopping/

如果你去groceries.js,在第39行,#addNewSection图像上有clic事件的代码。

然后在你点击大格力+按钮的页面中,会弹出一个处方集,然后再点击绿色的大+符号。您会注意到.click()函数中的代码被多次调用..

有谁知道为什么?

编辑:

我找到了错误的来源。 Y在一个名为init的函数中添加了对事件的挂钩,类似于:

function init() {
     $("#addNewSection").click( function(e){
          newSectionButtonClicked();
     });
}

并在$(function() ....中添加了一个调用但是我也从其他站点调用了这个init()所以每当我调用它时,函数的新实例就会挂钩到click事件!!只有当我们还没有挂钩时才有办法挂钩事件????

4 个答案:

答案 0 :(得分:2)

你应该只调用一次init()函数,或者在这个函数中删除click事件的赋值,并输入一个只调用一次的函数,例如:

$("#addNewSection").click( function(e){
  newSectionButtonClicked();
}); 

每次调用init()函数时都会调用此函数,因此每次调用的init()都会触发此事件一次。

你应该只召唤一次这个注册

答案 1 :(得分:1)

您的代码是否在同一元素上多次注册了单击处理程序。如果是这样,请尝试检查代码。这也是我所面临的情况。第一次单击调用一次,第二次单击两次,依此类推每次单击在同一个处理程序上注册一个单击处理程序。

此外,如果您可以向我们展示要审核的代码。

答案 2 :(得分:0)

function drawMarket(){
    $("#market").html("<ul id='marketList'>");
    $.each(sections, function(idx, obj){
        var name = htmlDecode(obj.Name);
        var listItem = $('<li  />');
        listItem.append(name);
        var innerComponent = $("<ul class='section' id='S_"+obj.Id+"'/>");

            var ItemName = htmlDecode(ItemObj.Name);
            innerComponent.append("<li id='"+ItemObj.Id+"' class='item'>"+ItemName+"</li>");

        listItem.append(innerComponent);
        listItem.append("<div class='clearer'/>");
        $("#marketList").append(listItem);
    });
    init();
}

请在 groceries.js 中替换此功能,它会对您有所帮助

您不需要在此函数中使用每个循环,因为它将始终附加内部文本

答案 3 :(得分:0)

每次单击加号按钮时调用newSectionButtonClicked()中的函数drawMarket(),并在drawMarket()中调用init()函数,因此多次定义click事件

你可以做这样的事情,只做一个初步的定义:

jQuery(document).ready(function() {
    $("#addNewSection").click( function(e){
        newSectionButtonClicked();
    });
});

jQuery(document).ready(function() {
    init();
});