我设置了一个链接元素,并在jquery中调用了它的click事件,但是click事件被调用了两次,请参见下面的jquery代码。
$("#link_button")
.button()
.click(function () {
$("#attachmentForm").slideToggle("fast");
});
请指教。
谢谢。
我设置了一个链接元素,并在jquery中调用了它的click事件,但是click事件被调用了两次,请参见下面的jquery代码。
$("#link_button")
.button()
.click(function () {
$("#attachmentForm").slideToggle("fast");
});
请指教。
谢谢。
Answers:
确保并检查您是否没有意外地在HTML页面中两次包含脚本。
单击之前取消绑定;
$("#link_button").unbind('click');
$("#link_button")
.button()
.click(function () {
$("#attachmentForm").slideToggle("fast");
});
这意味着您的代码两次包含了jquery脚本。但是尝试一下:
$("#btn").unbind("click").click(function(){
//your code
});
我试过了
e.stopImmediatePropagation(); 这似乎对我有用。
我遇到了同样的问题,但是您可以尝试更改此代码
$("#link_button")
.button()
.click(function () {
$("#attachmentForm").slideToggle("fast");
});
对此:
$("#link_button").button();
$("#link_button").unbind("click").click(function () {
$("#attachmentForm").slideToggle("fast");
});
对我来说,这段代码解决了这个问题。但是请注意不要在HTML页面中意外地两次包含脚本。我认为,如果您正确执行了这两件事,您的代码将正常工作。谢谢
请尝试这个
$('#ddlSupervisor').live('change', function (e) {
if (e.handled !== true) { //this makes event to fire only once
getEmployeesbySupervisor();
e.handled = true;
}
});
特别是在FireFox上,这绝对是一个bug。我搜索了很多上述所有答案,并最终被许多专家认为是错误。所以,我最终通过声明如下变量提出了这个想法
var called = false;
$("#ColorPalete li").click(function() {
if(!called)
{
called = true;
setTimeout(function(){ //<-----This can be an ajax request but keep in mind to set called=false when you get response or when the function has successfully executed.
alert('I am called');
called = false;
},3000);
}
});
通过这种方式,它首先检查而不是先前是否调用过该函数。
就我而言,它在Chrome中运行良好,而IE则.click()两次拨打电话。如果这是您的问题,则在调用该.click()事件后,我通过返回false修复了该问题
$("#txtChat").keypress(function(event) {
if (event.which == 13) {
$('#btnChat').click();
$('#txtChat').val('');
return false;
}
});
打电话unbind解决了我的问题:
$("#btn").unbind("click").click(function() {
// your code
});
我在FF上也有这个问题。但是,我的标签已绑定到<a>标签。尽管该<a>标签没有移到任何地方,但仍然可以双击。我将<a>标签替换为标签,<span>双击问题消失了。
另一种选择是,如果链接没有任何作用,则完全删除href属性。
如果您的活动呼叫了两次或三次或更多,这可能会有所帮助。
如果您正在使用类似的方式触发事件…
$('.js-someclass').click();
…然后注意.js-someclass页面上的元素数量,因为它会触发所有元素的click事件-而不仅仅是一次!
一个简单的解决方法是通过仅选择第一个元素来确保仅触发一次单击,例如:
$('.js-someclass:first').click();
可以肯定的是,在脚本中其他位置,“点击”事件又被绑定到同一元素,正如其他一些答案/评论所暗示的那样。
我有一个类似的问题,为了验证这一点,我只是向console.log脚本添加了一个命令,如以下代码片段所示:
$("#link_button")
.button()
.click(function () {
console.log("DEBUG: sliding toggle...");
$("#attachmentForm").slideToggle("fast");
});
如果在单击按钮时从浏览器的开发人员控制台中获得类似于下图的图像(就像我所做的那样),那么您可以确定该click()事件已两次绑定到同一按钮。
如果您需要快速修补程序,则其他注释者提出的使用该off方法(unbind自jQuery 3.0起不推荐使用btw )取消绑定事件的方法,然后再重新绑定它就可以了,我也建议这样做:
$("#link_button")
.button()
.off("click")
.click(function () {
$("#attachmentForm").slideToggle("fast");
});
不幸的是,这只是一个临时补丁!解决使老板满意的问题后,您应该真正深入研究代码并解决“重复绑定”问题。
实际的解决方案当然取决于您的特定用例。以我为例,存在一个“上下文”问题。我的函数被调用是由于对文档的特定部分进行了Ajax调用的结果:重新加载整个文档实际上是在重新加载“ page”和“ element”上下文,导致事件两次绑定到元素。
我对这个问题的解决方案是利用jQuery 一个功能,该功能与on相同,不同之处在于该事件在第一次调用后会自动解除绑定。对于我的用例而言,这是理想的选择,但同样,对于其他用例而言,它可能不是解决方案。