jQuery表单在超时时没有提交 - e [h]不是函数

时间:2014-02-05 12:54:47

标签: javascript jquery html forms

之前已经问过这个问题,但没有成功,也许是另一种情况

这是我的表格

<form id="testSubmit" method="post" action="submit.php">
     <!--The value of following field will be obtained when user submits test or time runs out -->
     <input type="hidden" name="user_answer" id="user_answer" value=""/>
     <input type="submit" id="submit" style="padding:5px;" value="Submit"/>
</form>

这是我的Javascript和jQuery代码

<script type="text/javascript">
    $('document').ready(function()
    {
   //pick up the options selected by the student and populate #userAnswer
        $('#testSubmit').submit(function()
        {
            var string='';
            $('.question').each(function () 
            {
                string += $(this).find('input[type="radio"]:checked').length ? $(this).find('input:checked').val() : 'z';
            });
            $('#user_answer').val(string);
        });

//timer for countdown and to submit the form
        var delay=5;
        function countdown()
        {
            setTimeout(countdown,1000);
            $('#timer').html("Time"+delay);
            delay--;
            if(delay<0)
            {
                $("#testSubmit").submit();
                delay=0;

            }
        }
    countdown();
    });
    </script>

但是这不会提交并提供错误e[h] is not a function;

我也尝试了document.getElementById("testSubmit").submit(),它提供了错误document.getElementById("testSubmit").submit() is not a function

document.forms[0].submit

相同的错误

修改

我把一个alert('Hello');置于计时器内部并且工作正常。因此计时器工作正常。问题是一旦时间到达零,就会出现错误。

2 个答案:

答案 0 :(得分:4)

“但这不提交并给出错误e [h]不是函数;”

将id =“submit”更改为其他内容。原因是如果你有一个id为submit的input元素,它会使用HTMLInputElement为表单设置一个submit属性。因此,您无法在HTMLFormElement上调用.submit方法。

答案 1 :(得分:1)

您应该将提交按钮ID更改为“提交”以外的其他内容。例如“submitButton”。

<input type="submit" id="submitButton" style="padding:5px;" value="Submit"/>   

此更改还应防止不必要的JS代码执行:

function countdown() {
        if (delay < 0) {
            $("#testSubmit").submit();
            delay = 0;
        } else {
            setTimeout(countdown, 1000);
            $('#timer').html("Time " + delay);
            delay--;
        }
    }