单击后从#id中删除jQuery事件(或防止再次单击)

单击后从#id中删除jQuery事件(或防止再次单击),jquery,ajax,modal-dialog,jquery-ui-dialog,Jquery,Ajax,Modal Dialog,Jquery Ui Dialog,伙计们 我真的在尽我最大的努力解决下面的问题,但是过了好几个小时,我看不到正确的道路!让我解释一下: 我有一个元素a-href(#opener),当单击它时,会触发一个jQueryUI模式对话框,该对话框通过ajax加载div(#target)中的URL 一切都很完美,但我希望这一切只发生一次 加载模式窗口后,我可以将一个类(.deactivated)设置为我的#opener a-href,并删除id(#opener)以防止再次触发该操作,但它不起作用。。。a-href保持可点击状态,打开模式

伙计们

我真的在尽我最大的努力解决下面的问题,但是过了好几个小时,我看不到正确的道路!让我解释一下:

  • 我有一个元素a-href(#opener),当单击它时,会触发一个jQueryUI模式对话框,该对话框通过ajax加载div(#target)中的URL
  • 一切都很完美,但我希望这一切只发生一次
  • 加载模式窗口后,我可以将一个类(.deactivated)设置为我的#opener a-href,并删除id(#opener)以防止再次触发该操作,但它不起作用。。。a-href保持可点击状态,打开模式窗口(#target)的次数与我点击次数相同
  • 我找到的唯一解决方案是使用$(this.fadeOut();-)从DOM中完全删除a-href,但这真的很难看,因为我的链接开启器在空气中消失了
有什么想法吗? 非常感谢你。 G


$(文档).ready(函数(){
$('#opener')。单击(函数(){
$('#目标')。加载('http://my.url,函数(){
$(“#目标”)。对话框({
标题:“我的标题”,
真的,
dialogClass:“我的班级”,
莫代尔:是的,
隐藏:{效果:“淡入”,速度:“快速”},
显示:{效果:“淡入”,速度:“快速”},
closeOnEscape:没错,
closeText:“Close”,
beforeClose:函数(事件,ui){
'窗口.位置.重新加载(真)'
},
});//结束对话框
});
$(this.addClass('.deactivated');
$(this.removeAttr('id');
});
});

说明

.one(),将处理程序附加到元素的事件。处理程序是 每个元素最多执行一次


从元素中删除ID不会删除绑定在该元素上的任何处理程序(除非您使用了“事件委派”)

使用(而不是
.on
或过时的
.bind
)在单击事件上绑定,然后在处理程序第一次触发后自动解除绑定:

$('#opener').one('click', ...)
或禁用单击处理程序中的事件:

$('#opener').on('click', function() {
    ...
    $(this).off('click').addClass('.deactivated');
});
注意:最好总是使用较新的
.on
(或
.one
)和
.off
函数,而不是
。bind
、或
。click
等。这会使事件处理代码更加一致,并避免与
如何注册事件处理程序或(无参数)混淆触发事件处理程序。

您可以使用该函数设置只触发一次的事件处理程序,然后将其自身删除:

$('#opener').one('click', function(event) {
    // your code here
});
使用一个

$('#opener').one("click", function() {

});

非常感谢您!我为自己找不到如此明显的答案而感到羞愧……规则:保存以备可能的重复使用-使用
开/关
;仅使用一次,切勿再次使用-使用
one
功能亲爱的Alnitak!非常感谢您如此详细的帮助。问题解决了!我使用PHP,正在启动jQuery,您的帮助非常有指导意义。顺致敬意,如果需要,您还可以在
one
中设置停用按钮您好,但是如何再次重新激活按钮?例如,当单击另一个元素时#打开器将被激活以再次单击?
$('#opener').one('click', function(event) {
    // your code here
});
$('#opener').one("click", function() {

});