jQuery Button.click()事件被触发两次

jQuery Button.click()事件被触发两次,jquery,function,button,click,Jquery,Function,Button,Click,我对此代码有以下问题: <button id="delete">Remove items</button> $("#delete").button({ icons: { primary: 'ui-icon-trash' } }).click(function() { alert("Clicked"); }); 删除项目 $(“#删除”)。按钮({ 图标:{ 主:“ui图标垃圾” } })。单击(函数(){ 警报(

我对此代码有以下问题:

<button id="delete">Remove items</button>

$("#delete").button({
     icons: {
             primary: 'ui-icon-trash'
     }
}).click(function() {
     alert("Clicked");
});
删除项目
$(“#删除”)。按钮({
图标:{
主:“ui图标垃圾”
}
})。单击(函数(){
警报(“点击”);
});
如果单击此按钮,警报将显示两次。它不仅与这个特定的按钮,而且与我创建的每一个按钮


我做错了什么?

您当前的代码运行正常,您可以在此处尝试:


如果示例之外有触发另一个事件的内容,请检查是否有其他处理程序也触发该元素上的
单击事件。

在这种情况下,我们可以执行以下操作

$('selected').unbind('click').bind('click', function (e) {
  do_something();
});
最初我让事件触发两次,当页面刷新时,它触发四次。过了好几个小时,我才通过谷歌搜索找到答案


我还必须说,在我开始使用JQueryUI手风琴小部件之前,代码最初是有效的。

我也经历过奇怪的行为。所以对我来说,“返回错误”就是个好办法

        $( '#selector' ).on( 'click', function() {
            //code
            return false;
        });

我发现绑定一个元素。在一个函数中单击多次会将其排队,因此下次单击它时,它将触发绑定函数执行的次数。新来者的错误可能在我这方面,但我希望这能有所帮助。TL、DR:确保绑定只发生一次的设置函数上的所有单击。

如果使用

$( document ).ready({ })


不止一次,单击功能将触发与使用次数相同的次数。

我也遇到同样的问题,尝试了所有方法,但都没有成功。所以我使用了以下技巧:

function do_stuff(e)
{
    if(e){ alert(e); }
}
$("#delete").click(function() {
    do_stuff("Clicked");
});
检查该参数是否不为空,而不是检查代码。因此,当函数第二次触发时,它将显示您想要的内容

你可以试试这个

    $('#id').off().on('click', function() {
        // function body
    });
    $('.class').off().on('click', function() {
        // function body
    });

就像尼克想说的,来自外界的东西两次触发了这一事件。要解决这个问题,应该使用event.stopPropagation()来防止父元素冒泡

$('button').click(function(event) {
    event.stopPropagation();
});

我希望这能有所帮助。

在我的例子中,我是这样使用change命令的

$(文档).on('change','select brand',function(){…我的代码…})

然后我换了一条路

$('.select brand')。在('change',function(){…我的代码…})上


它解决了我的问题。

这也可以通过将
输入
标签
放在带有click listener的元素中来触发

单击
标签
,这会触发一个单击事件,以及
标签
输入
上的另一个单击事件。这两个事件都适用于您的元素

看到这支笔的一个奇特的CSS只切换:

注意:这是特定于jQuery的而非,本机侦听器会被触发2次,并显示在笔中

$("#id").off().on("click", function() {

});
为我工作

$("#id").off().on("click", function() {

});

这可能是由于以下原因造成的:

  • 您已在同一html文件中多次包含脚本
  • 您已经两次添加了事件监听器(例如:使用元素上的
    onclick
    属性以及jquery)
  • “强>事件是冒泡< <强> >某个父元素。(可以考虑使用<代码>事件。
  • 如果在
    Django
    中使用
    模板继承
    扩展
    ,则很可能将脚本包含在多个文件中,这些文件由
    包含
    扩展
    模板标记组合在一起
  • 如果您使用的是
    Django
    模板,则错误地将
    放置在另一块
  • 因此,您应该找出它们并删除重复导入。这是最好的做法

    另一种解决方案是在脚本中首先删除所有
    单击
    事件侦听器,如:

    $("#myId").off().on("click", function(event) {
    event.stopPropagation();
    });
    

    如果您确定事件未冒泡,则可以跳过
    事件.stopPropagation();

    除非您希望按钮为提交按钮,否则请将其编码为 删除项目 那应该能解决你的问题。
    如果未指定按钮元素的类型,它将默认为“提交”按钮,从而导致您确定的问题。

    与Stepan的答案相关

    在本例中,我的
    侦听器中既有
    输入
    又有
    标签
    。单击()

    我刚刚将
    标签
    替换为
    div
    ,成功了!

    如果您使用的是AngularJS: 如果您正在使用AngularJS,并且您的jQuery click事件在控制器内,它将受到Angular框架本身的干扰并触发两次。要解决此问题,请将其移出控制器,然后执行以下操作:

    // Make sure you're using $(document), or else it won't fire.
    $(document).on("click", "#myTemplateId #myButtonId", function () {
       console.log("#myButtonId is fired!");
       // Do something else.
    });
    
    angular.module("myModuleName")
       .controller("myController", bla bla bla)
    

    你说得对!我在.click()前面放了一个.unbind(“click”)。现在它工作正常。我必须再次搜索触发事件的元素…非常感谢!这听起来更像是绑定了同一个单击事件两次。jQuery将对绑定进行排队,因此如果您将多个单击事件绑定到同一个元素,当您单击它时,它们将全部触发。稍有不同的是e click事件触发了两次,而同一个click事件绑定到元素则触发了两次。@user276289-可能您的整个代码运行了不止一次,请确保它只在页面中包含一次。感谢Nick Craver!这正是我的问题,我将代码内联到了一个jQuery对话框中,因此当jQuery呈现了y UI对话框。这是正确的答案。很多时候,双重加载相同的JS文件也会导致此错误。此变体也可以工作:
    $('.element')。解除绑定(“click”)。打开('click',函数(e){…})
    正是我想要的。我还可以确认@RosdiKasim的评论是正确的-这就是我所用的。这是我想要的答案,并且在5分钟内得到了它。谢谢!在我的情况下,我无法解开或删除它
    // Make sure you're using $(document), or else it won't fire.
    $(document).on("click", "#myTemplateId #myButtonId", function () {
       console.log("#myButtonId is fired!");
       // Do something else.
    });
    
    angular.module("myModuleName")
       .controller("myController", bla bla bla)