JavaScript event.preventDefault() 与其他参数



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

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

我想先阻止表单提交,然后再进行验证。但是,它还是会提交。如果我不传递 btnSubmit,它可以工作,但我想这样做。

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

当你在做:

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

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

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

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

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

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

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

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

最新更新