使用jquery submit()会导致函数被多次触发

时间:2014-03-25 21:15:18

标签: javascript jquery forms

我正在jQuery中编写一些表单验证代码。我注意到以下代码非常奇怪:

var $form = $('#test-form');

$form.on('submit', function(e) {
    e.preventDefault();
    validate();
}); 

function validate() {
    console.log('in');
    $form.submit();
}

我希望将console.log恢复一次,然后再提交表单。相反,我得到控制台日志大约700次,表单不提交。这可以在这个测试中看到:

http://jsfiddle.net/kZMf8/1/

这到底是怎么回事?

2 个答案:

答案 0 :(得分:2)

使用本机提交绕过jQuery事件处理程序:

function validate() {
    console.log('in');
    $form.get(0).submit(); // same as document.getElementById("test-form").submit();
}

答案 1 :(得分:0)

你的代码中有一个无限循环:

var $form = $('#test-form');

$form.on('submit', function(e) {
    e.preventDefault();/*Prevent form validation default event*/
    validate();/*Call the function Validate*/
}); 

function validate() {
    console.log('in');/*Log in the console*/
    $form.submit();/*Call the default submit event of the form which get you back at line 4, this will go on fore ever.*/
}

你应该避免在$form.submit()validate()因为它会导致无限循环。 validate()应使用验证返回不重新提交表单的数据。

你可能正在寻找类似的东西:

function AJAXValidation()
{
    var request = $.ajax(
    {
        url: "Process.php",
        type: "POST",
        contentType:"application/x-www-form-urlencoded;charset=UTF-8",
        data:
        {
            /*your data*/
        }
    });

    /*call back fonction which is like your validate() function*/
    request.done(
        function(message)
        {
        /*Do stuff with message*/
        });
}
此代码消息中的

可以是JSON字符串,名称,日期,wahtever进程返回。