Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 文档单击事件会自动注册并立即执行_Javascript_Jquery - Fatal编程技术网

Javascript 文档单击事件会自动注册并立即执行

Javascript 文档单击事件会自动注册并立即执行,javascript,jquery,Javascript,Jquery,我对文档有一些问题。在('click')事件上,我第一次打开表单时,它会将“click”事件绑定到文档,但它不会执行它,这是我所期望的。但是当我关闭表单并再次尝试打开它时,文档会绑定“click”事件并立即执行它。我想知道是否有办法解决这个问题。现在,我正在使用setTimeout(…)函数作为解决此问题的一种黑客方法,但我正在寻找一种更好的方法来修复它 initXXXXForm = function() { var $form = $('.zzzz'), $formOpen =

我对文档有一些问题。在('click')事件上,我第一次打开表单时,它会将“click”事件绑定到文档,但它不会执行它,这是我所期望的。但是当我关闭表单并再次尝试打开它时,文档会绑定“click”事件并立即执行它。我想知道是否有办法解决这个问题。现在,我正在使用setTimeout(…)函数作为解决此问题的一种黑客方法,但我正在寻找一种更好的方法来修复它

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)中;您是否见过类似的解决方案:?在这里打开表单意味着什么?您想要什么:在表单外部单击应关闭表单?在表单外部单击将关闭表单,但我想知道是否有办法摆脱此超时功能!!