为什么onsubmit =“”这么慢?

时间:2014-01-15 17:05:14

标签: javascript jquery html validation

我首先使用它:

HTML:

<form onsubmit="return validate()">
    ...
    <input type="submit" id="submit-button"/>
</form>

JS:

function validate() {
    // many lines for a big validation with regex and so on...
    $('form').submit();
}

我注意到,加载的时间非常长,所以我将其更改为:

HTML:

<form>
    ...
    <input type="submit" id="submit-button"/>
</form>

JS:

function validate() {
    // many lines for a big validation with regex and so on...
        $('form').submit();
    }

    $('#submit-button').on('click', function(e) {
        e.preventDefault();
        validate();
});

加载时间还可以,大约快100倍!

有人可以给我一个 - 希望 - 简短的回答吗?

2 个答案:

答案 0 :(得分:4)

在第一个示例中,您在submit回调中触发了submit事件,然后调用堆栈超出[see fiddle]。

第二个示例依赖于click事件,因此似乎可以正常工作,但您应该在验证后通过ajax更好地触发HTTP调用。

答案 1 :(得分:0)

您的功能称为validate(),但我没有看到任何验证,只有submit事件。问题是,你设置它的方式是错误的。 validate()应该返回true/false,以便表单知道它是否应该继续。相反,您的验证功能应该更像这样:

function validate() {
  //many lines for a big validation with regex and so on...
  if (val=='') { return false; }
  else { return true; }
}

现在,您的表单只会在validate()函数返回true时提交,否则将无法继续。这将解决您的问题,因此您无法解决问题。