【问题标题】:JavaScript event.preventDefault() with other arguementsJavaScript event.preventDefault() 和其他参数
【发布时间】:2016-05-21 01:14:05
【问题描述】:

我有这个函数调用,我想传递参数btnSubmit:

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

我想先阻止表单提交然后验证。但是,它无论如何都会提交。如果我不通过 btnSubmit 就可以了,但我想这样做。

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

【问题讨论】:

  • 你需要任何事件处理程序的基础知识,一个匿名函数 -> $(btnSubmit).click(function(event) { validate(btnSubmit, event) });
  • 为什么不创建validate,就好像它是一个典型的事件处理程序,其中绑定的元素被引用为this。然后就是$(btnSubmit).click(validate)。
  • 你认为foo(bar())的执行顺序是什么?是先执行foo 还是bar?
  • @adeneo 谢谢!如果您将此作为答案发布,我会接受。
  • @squint 我以后可能会为此添加更多争论,所以我觉得现在最好保留这个变量。

标签: javascript jquery validation preventdefault


【解决方案1】:

当你在做的时候:

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

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

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多