JavaScript event.preventDefault() 和其他参数

JavaScript event.preventDefault() with other arguements

我调用了一个函数,我想传递参数 btnSubmit:

$(btnSubmit).click( validate(btnSubmit, event) );

我想先阻止表单提交再验证。但是,无论如何它都会提交。如果我不传递 btnSubmit 就可以工作,但我想这样做。

function validate (btnSubmit, event) {
    event.preventDefault();
}

当你在做的时候:

$(btnSubmit).click( validate(btnSubmit, event) );

您将立即调用 validate 函数并将其 returned 值作为 $(btnSubmit).click() 的回调传递。由于该函数没有 return 任何东西,因此实际上没有创建事件处理程序。

您有两种可能的解决方案:

  1. 正如 squint 建议的那样,将 validate 函数更改为使用 this 而不是 btnSubmit 并将 event 作为第一个参数:

    function validate (event) {
      event.preventDefault();
    }
    

    然后像这样分配事件处理程序:

    $(btnSubmit).click(validate);
    
  2. 使用匿名函数将 btnSubmitevent 传递给 validate:

    $(btnSubmit).click(function(event) {
      validate(btnSubmit, event)
    });