Javascript 文档单击事件会自动注册并立即执行
我对文档有一些问题。在('click')事件上,我第一次打开表单时,它会将“click”事件绑定到文档,但它不会执行它,这是我所期望的。但是当我关闭表单并再次尝试打开它时,文档会绑定“click”事件并立即执行它。我想知道是否有办法解决这个问题。现在,我正在使用setTimeout(…)函数作为解决此问题的一种黑客方法,但我正在寻找一种更好的方法来修复它Javascript 文档单击事件会自动注册并立即执行,javascript,jquery,Javascript,Jquery,我对文档有一些问题。在('click')事件上,我第一次打开表单时,它会将“click”事件绑定到文档,但它不会执行它,这是我所期望的。但是当我关闭表单并再次尝试打开它时,文档会绑定“click”事件并立即执行它。我想知道是否有办法解决这个问题。现在,我正在使用setTimeout(…)函数作为解决此问题的一种黑客方法,但我正在寻找一种更好的方法来修复它 initXXXXForm = function() { var $form = $('.zzzz'), $formOpen =
initXXXXForm = function() {
var $form = $('.zzzz'),
$formOpen = $('.xxxx'),
$formClose = $( '.yyyy' ),
$formMask = $('.wwww'),
toggleForm = function() {
if ($form.hasClass('active') === true) {
// close form
$form.removeClass('active');
$formMask.removeClass('active');
$(document).off('click'); // remove event on document to close form
}
else {
// open form
$form.addClass('active');
$formMask.addClass('active');
// bind close event when clicking outside form, set short timeout so this click event doesn't interfere with others
setTimeout(function() {
$(document).on('click', function(e) {
if ($(e.target).closest('.xxxx-form').length === 0 ) {
$(this).off('click');
toggleForm();
}
});
}, 100);
}
};
$formOpen.on('click', function() {
toggleForm();
});
}
将最后一句话改为:
$formOpen.off("click", toggleForm).on("click", toggleForm);
它被包装在iffy(函数($){…})(jQuery)中;您是否见过类似的解决方案:?在这里打开表单意味着什么?您想要什么:在表单外部单击应关闭表单?在表单外部单击将关闭表单,但我想知道是否有办法摆脱此超时功能!!