此代码存在以下问题:
<button id="delete">Remove items</button>
$("#delete").button({
icons: {
primary: 'ui-icon-trash'
}
}).click(function() {
alert("Clicked");
});
如果单击此按钮,警报将显示两次。我不仅创建了这个特定的按钮,而且还创建了每个按钮。
我究竟做错了什么?
Answers:
您当前的代码有效,您可以在这里尝试:http : //jsfiddle.net/s4UyH/
在示例之外,您还有其他东西触发另一个.click()
,检查其他处理程序是否也在click
该元素上触发了一个事件。
在这种情况下,我们可以执行以下操作
$('selected').unbind('click').bind('click', function (e) {
do_something();
});
我最初将事件触发两次,当刷新页面时,它将触发四次。过了无结果的几个小时之后,我才想到Google搜索。
我还必须说,直到我开始使用JQueryUI手风琴小部件之前,代码才开始起作用。
$('.element').unbind("click").on('click', function(e) { ... });
我也经历过奇怪的行为。因此,对我来说,“返回假”就可以了。
$( '#selector' ).on( 'click', function() {
//code
return false;
});
你可以试试看
$('#id').off().on('click', function() {
// function body
});
$('.class').off().on('click', function() {
// function body
});
这可以作为很好地兼具触发input
和label
内部与点击收听的元素。
你点击label
,这将触发click事件和以及对再点击一下事件input
的label
。这两个事件都会影响到您的元素。
看到这只花式CSS切换笔:https : //codepen.io/stepanh/pen/WaYzzO
注意:这不是jQuery特有的,本机侦听器被触发2次,如笔所示。
我遇到了同样的问题,并尝试了一切,但没有成功。因此,我使用了以下技巧:
function do_stuff(e)
{
if(e){ alert(e); }
}
$("#delete").click(function() {
do_stuff("Clicked");
});
您要检查该参数是否不为空而不是代码。因此,当函数第二次触发时,它将显示您想要的内容。
$("#id").off().on("click", function() {
});
为我工作。
$("#id").off().on("click", function() {
});
这可能是由于以下原因引起的:
onclick
在元素上使用属性添加了事件监听器template inheritance
像extends
在django
,很可能你已经包含在多个文件中的脚本,其被组合在一起include
或extend
django
模板,则错误地将block
另一个内部放置了。因此,您应该找到它们并删除重复的导入。这是最好的事情。
另一个解决方案是click
首先在脚本中删除所有事件侦听器,例如:
$("#myId").off().on("click", function(event) {
event.stopPropagation();
});
event.stopPropagation();
如果您确定事件未冒泡,则可以跳过。
我发现在一个函数中绑定一次element.click会使其排队,因此,下次单击它时,它将触发绑定函数执行的次数。新来者的错误可能会给我带来麻烦,但我希望它会有所帮助。TL,DR:确保将所有单击绑定到仅发生一次的设置功能上。
就像Nick想要说的一样,外部的某些事件两次触发了该事件。要解决此问题,应使用event.stopPropagation()防止父元素冒泡。
$('button').click(function(event) {
event.stopPropagation();
});
我希望这有帮助。
除非您希望您的按钮是一个提交按钮,否则将其编码为“应该解决您的问题的删除项目”。如果未指定按钮元素的类型,则默认为提交按钮,从而导致您发现问题。
如果您使用的是AngularJS,并且您的jQuery click事件位于INSIDE THE CONTROLLER内,它将被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)