单击后立即删除单击事件处理程序
Remove click event handler immediately after click
我一直在尝试删除点击事件处理程序后被点击一次,以防止事件多次触发。
我试过.unbind()
, .off()
, .one()
,并把每个在不同的地方在功能,但似乎没有工作。
如果我使用.off()
,我得到undefined is not a function
错误。
如果我使用.one()
,我想基本上打开事件,如果我点击另一个按钮。如果我点击选择,我想让它只触发一次,但如果我点击取消选择,我想让选择再次被点击。
我试过这样做,但奇怪的是代码甚至没有触发,所以我被迫使用click()
。
$().on('click', function()...
我应该使用哪个函数,我应该把它放在哪里?
(function($) {
Drupal.behaviors.wysiwyg = {
attach: function(context, settings) {
var toggle = function(state) {
$('#wysiwyg-profile-form .buttons-and-plugins input:checkbox').attr('checked', state);
}
$('#wysiwyg-select-all').click(function(){
toggle(true);
return false;
});
$('#wysiwyg-unselect-all').click(function(){
toggle(false);
return false;
});
}
}
}(jQuery))
检查这是否适用于您。同时要确保jquery的版本在1.7以上,才能让"on", "off"正常工作。
(function($) {
Drupal.behaviors.wysiwyg = {
attach: function(context, settings) {
var counter = 0;
var toggle = function(state) {
$('#wysiwyg-profile-form .buttons-and-plugins input:checkbox').attr('checked', state);
}
$(document).off('click',"#wysiwyg-select-all").on('click', "#wysiwyg-select-all", function(e) {
toggle(true);
return false;
});
$(document).off('click',"#wysiwyg-unselect-all").on('click', "#wysiwyg-unselect-all", function(e) {
toggle(false);
return false;
});
}
}
}(jQuery))
已更新
我把其他人建议的一些事情弄得一团糟,我认为这正是你需要完成的:
(function ($) {
Drupal.behaviors.wysiwyg = {
attach: function (context, settings) {
var selectFn = function() {
toggle(true);
return false;
}
var unselectFn = function() {
toggle(false);
return false;
}
var toggle = function (state) {
$('#wysiwyg-profile-form .buttons-and-plugins input:checkbox').attr('checked', state);
if (state) {
$(document).off("click", '#wysiwyg-select-all,#wysiwyg-unselect-all', "**");
$(document).on("click", "#wysiwyg-unselect-all", unselectFn;
}else{
$(document).off("click", '#wysiwyg-select-all,#wysiwyg-unselect-all', "**");
$(document).on("click", "#wysiwyg-select-all", selectFn;
}
};
$(document).on("click", "#wysiwyg-select-all", selectFn);
$(document).on("click", "#wysiwyg-unselect-all", unselectFn);
}
};
}(jQuery));
它切换按钮事件的绑定,并将与动态创建的元素一起工作。这是Matt Green的答案的衍生物,但我注意到他的几个问题,即他在事件绑定中调用selectFn和unselectFn,而不是引用它们。
像这样:
$("#wysiwyg-select-all").one("click", function() {
toggle(true);
return false;
});
为click按钮添加一个类名,然后在点击一次后删除该类。
$('#wysiwyg-select-all .myclassname').on('click', function(){
toggle(true);
$(this).removeClass('myclassname');
$('#wysiwyg-unselect-all').addClass('secondclassname');
return false;
});
$('#wysiwyg-unselect-all .secondclassname').on('click', function(){
toggle(false);
$('#wysiwyg-select-all').addClass('myclassname');
$(this).removeClass('secondclassname');
return false;
});
为什么不使用任何全局变量作为标志呢?点击事件设置为true
if (btn1Clicked)
return;
btn1Clicked=true;
要重新启用,只需将其设置为false。如果需要,可以使用return false而不是return。
这应该适用于动态创建的元素:
(function ($) {
Drupal.behaviors.wysiwyg = {
attach: function (context, settings) {
var toggle = function (state) {
$('#wysiwyg-profile-form .buttons-and-plugins input:checkbox').attr('checked', state);
};
$(document).on("click", "#wysiwyg-select-all", selectFn());
$(document).on("click", "#wysiwyg-unselect-all", unselectFn());
}
};
}(jQuery));
function selectFn() {
$(document).off("click", '#wysiwyg-select-all', "**");
$(document).on("click", "#wysiwyg-unselect-all", unselectFn());
toggle(true);
return false;
}
function unselectFn() {
$(document).off("click", '#wysiwyg-unselect-all', "**");
$(document).on("click", "#wysiwyg-select-all", selectFn());
toggle(false);
return false;
}
相关文章:
- 复选框,然后单击事件处理
- GAS 单击事件处理程序导致 UI Web 应用中出现“意外错误”
- 递归添加单击事件处理程序
- 单击事件执行单击和悬停事件处理程序,即使单击事件处理程序取消绑定所有处理程序也是如此
- 单击的元素的 grab 属性 - 使用单击事件处理程序
- AmStockCharts - 单击事件处理程序
- 复选框单击事件处理程序和显示/隐藏功能
- 模式弹出窗口无法正常工作,它多次调用函数 - 单击事件处理程序运行多次
- jQuery on() 单击事件处理程序不起作用
- 主干/车把/引导设置中的按钮单击事件处理
- 附加到 dom 元素的 jQuery 单击事件处理程序
- 如何在鼠标悬停事件处理程序中创建单击事件处理程序
- 触发单个单击事件时触发的所有单击事件处理程序
- 如何运行element's单击事件处理程序
- 使用单击事件处理程序的 JQuery.如何防止所有元素不显示一次只显示一个元素
- 表单元格内span或td的单击事件处理程序不起作用
- 单击事件处理程序中的XMLHttpRequest状态为0
- JavaScript单击事件处理
- 在运行时HTML元素上调用单击事件处理程序
- 在一段时间内禁用单击事件处理程序