我对此代码有以下问题:
<button id="delete">Remove items</button>
$("#delete").button({
icons: {
primary: 'ui-icon-trash'
}
}).click(function() {
alert("Clicked");
});
如果单击此按钮,警报会显示两次。它不仅仅是使用这个特定的按钮,而是我创建的每一个按钮。
我做错了什么?
答案 0 :(得分:114)
在这种情况下,我们可以执行以下操作
$('selected').unbind('click').bind('click', function (e) {
do_something();
});
我最初触发了两次事件,当页面刷新时会触发四次。在经过谷歌搜索之后,经历了许多无效的工作。
我还必须说代码最初工作,直到我开始使用JQueryUI手风琴小部件。
答案 1 :(得分:60)
您当前的代码有效,您可以在此处尝试:http://jsfiddle.net/s4UyH/
示例之外的其他内容会触发另一个.click()
,请检查还触发该元素上的click
事件的其他处理程序。
答案 2 :(得分:31)
我也经历过的奇怪行为。所以对我来说&#34;返回false&#34;做了伎俩。
$( '#selector' ).on( 'click', function() {
//code
return false;
});
答案 3 :(得分:14)
如果您使用
$( document ).ready({ })
或
$(function() { });
不止一次,点击功能会触发多次使用。
答案 4 :(得分:10)
你可以试试这个。
$('#id').off().on('click', function() {
// function body
});
$('.class').off().on('click', function() {
// function body
});
答案 5 :(得分:3)
我遇到了同样的问题并尝试了一切,但它没有奏效。所以我使用了以下技巧:
function do_stuff(e)
{
if(e){ alert(e); }
}
$("#delete").click(function() {
do_stuff("Clicked");
});
您检查该参数是否不是您的代码。因此,当第二次触发该功能时,它将显示您想要的内容。
答案 6 :(得分:2)
$("#id").off().on("click", function() {
});
为我工作。
$("#id").off().on("click", function() {
});
答案 7 :(得分:1)
我发现在一个多次发生的函数中绑定一个element.click会将其排队,所以下次单击它时,它会触发绑定函数执行的次数。新人错误可能在我的结束,但我希望它有所帮助。 TL,DR:确保绑定仅发生一次的设置功能的所有点击。
答案 8 :(得分:1)
就像尼克试图说的那样,外面的东西会引发两次事件。要解决这个问题,你应该使用event.stopPropagation()来阻止父元素冒泡。
$('button').click(function(event) {
event.stopPropagation();
});
我希望这会有所帮助。
答案 9 :(得分:1)
在我的情况下,我像这样使用change命令
$(document).on('change', '.select-brand', function () {...my codes...});
然后我改变了方式
$('。select-brand')。on('change',function(){...我的代码...});
它解决了我的问题。
答案 10 :(得分:1)
也可以通过将input
和label
都放置在具有点击监听器的元素中来。
您点击label
,这会触发点击事件,并且会在input
上为label
再次 另一个点击事件。这两个事件都与您的元素有关。
请参见此笔仅使用CSS的花键:https://codepen.io/stepanh/pen/WaYzzO
注意:这不是不是特定于jQuery的,本机侦听器被触发2次,如笔所示。
答案 11 :(得分:0)
通常是在模板中多次有效地包含脚本时引起的。
onclick
属性添加了事件监听器template inheritance
中的extends
一样使用django
,则很可能已将脚本包含在多个文件中,这些文件由include
或{{1 }} 因此,您应该找出并删除重复的导入。这是最好的事情。
另一种解决方案是先在脚本中删除所有extend
事件监听器,例如:
click
答案 12 :(得分:0)
除非您希望您的按钮成为提交按钮,否则将其编码为 删除项目 那应该解决您的问题。 如果未指定按钮元素的类型,则默认为提交按钮,从而导致您发现问题。
答案 13 :(得分:0)
与Stepan的答案有关。
在我的情况下,我的"additional_path_items": [
"/path/to/add/1",
"/path/to/add/2",
],
侦听器中同时有input
和label
。
我刚刚将.click()
替换为label
,就可以了!
答案 14 :(得分:0)
如果您使用的是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)