Javascript JQuery-Button多次触发

Javascript JQuery-Button多次触发,javascript,php,jquery,button,dynamic,Javascript,Php,Jquery,Button,Dynamic,我有一个清单,当我点击一个复选框时,我会得到一个列表。我可以选中多个复选框,因此我可以得到更多的列表。我通过JQuery在每个列表的末尾添加了一个按钮。我的按钮代码如下所示: //Add a button to the previous list: function add() { $(".list:last").append("<div id='button'><input type='button' class='click' id='feld' name='fel

我有一个清单,当我点击一个复选框时,我会得到一个列表。我可以选中多个复选框,因此我可以得到更多的列表。我通过JQuery在每个列表的末尾添加了一个按钮。我的按钮代码如下所示:

//Add a button to the previous list:
function add() {
    $(".list:last").append("<div id='button'><input type='button' class='click' id='feld' name='feld' value='+'/>Add new listfield</div>");
}
当我点击按钮时,我会看到一个带有空文本字段的新复选框:

$(document).ready(function() {
    // Variables for counting
    var utxtname = 0;
    var ucheckname = 0;
    var utxtid = 1;
    var ucheckid = 1;
    var uctxtname = 1;
    var uccheckname= 1;

    //Function for the buttons with the same class ".click"

    $(document).on('click', '.click', function() {
        var utxtname ='utxtfield'+uctxtname;
        var ucheckname ='uchecklist'+uccheckname;
        $(this).closest(".list").append("<br><input type='checkbox' name=' "+ucheckname+"' id='"+ucheckid+"' checked><input type='textfield' name ='"+utxtname+"' id='"+utxtid+"'/>");
        uctxtname += 1;
        uccheckname += 1;
        utxtid += 1;
        ucheckid += 1;
    });

});
我的问题是:

当我生成多个按钮时,该函数会触发多次。如果我有3个列表和3个生成的按钮,我的函数会在我单击一个按钮时生成3个按钮。我知道我犯错误的原因。这是因为我有3个按钮和同一个类,所以它会多次触发函数。我就是想不出怎么解决这个问题。我尝试了很多方法来防止这种情况。例如,取消绑定函数并再次绑定它。我还尝试动态添加具有独特功能的按钮,但我无法做到这一点。 有什么办法能让我更容易地解决这个问题吗

只需在jquery中的on语句之前使用Off

你可以用

e.PreventDefault();

语句以防止多个触发器

使用内部函数是最简单的解决方案,但可能会导致内存泄漏。这只是一个更多的选择

function add() {
    var $button = $("<div id='button'><input type='button' class='click' id='feld' name='feld' value='+'/>Add new listfield</div>");
    $(".list:last").append($button);
    $button.click(function(){
        /*process here*/
    });
}

仅用于提醒,按钮可能不会释放,因为单击功能已绑定。如果您在自己的代码中删除,请添加$button。取消绑定单击

我认为你的解释不对。它应该只为您单击的按钮触发,即使您有相同类的其他按钮。您可以制作一个JSFIDLE来演示这个问题吗?您正在使用add函数中相同的id生成html元素。它不会解决您的问题,但您应该更改它,或者您没有使用它们,因此不需要它们,或者您正在使用它们,并且不会得到可靠的结果。我将尝试在JSFIDLE上对其进行编码。我需要查看更多的DOM代码,但其他按钮可能位于气泡路径中,即。,从单击的按钮到文档的路径是直线的,因此也会被触发。jQuery将事件从事件目标冒泡到处理程序所连接的元素,即从最内层到最外层的元素,并沿与选择器匹配的路径为任何元素运行处理程序。是的,请给我们看一个fiddle.use event.stoppropagation我认为无论何时创建复选框,单击事件都会注册。方法应该是e.preventDefault注意小写字母p@Navin谢谢,我是个新手。只需指出如何从您的版本中编写格式代码: