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)