jquery.min.js:2未捕获的TypeError:event.preventDefault不是函数

时间:2018-05-31 08:49:26

标签: javascript jquery

我有一个函数,当时间到达0表单时应该点击开始按钮的倒计时时间应该自动提交但是当我使用preventDefault()输出错误时,表单提交两次event.preventDefault不是函数

这是我的代码

    <script>
    $(document).ready(function () {
        $('#startbutton').click(function (e) {
            e.preventDefault()
            var t = $(this).attr('timevalue');
            var fiveMinutes = 60 * parseInt(t);
            $(function ($) {
                $('#festus').hide();
                display = $('#time');
                startTimer(fiveMinutes, display);
            });
        });                

        function startTimer(duration, display) {
            var timer = duration, minutes, seconds;
            var __timer = setInterval(function () {
            minutes = parseInt(timer / 60, 10);
            seconds = parseInt(timer % 60, 10);

            minutes = minutes < 10 ? "0" + minutes : minutes;
            seconds = seconds < 10 ? "0" + seconds : seconds;

            display.text(minutes + ":" + seconds);

             if (--timer < 0) {
                 clearInterval(__timer);
                 var form_id = $('#questionsandanswers').serializeArray();
                        var url = $('#questionsandanswers').attr('action');


               $(function (event) {
                   event.preventDefault();
                    $.post(url, form_id, function (data) {
                        alert('time is up you can no longer proceed');
                    });
                });
            }                      
         },1000);
    }
});
</script>

我可以做些什么来避免表单提交两次

2 个答案:

答案 0 :(得分:1)

因为你的html丢失了,但是你写了你要提交一个,你应该做这样的事情:

$(function() {
 $('#form').on('submit', function(event){
        event.prevenDefault(); // stops submitting the form

        //timer logic here
        // ...
        // then call $.post to submit your form via ajax
  });
});

不要嵌套jQuery Dom-Ready函数。

答案 1 :(得分:0)

罪魁祸首就在这里:

/**
 * Runs the specified action on the UI thread. If the current thread is the UI
 * thread, then the action is executed immediately. If the current thread is
 * not the UI thread, the action is posted to the event queue of the UI thread.
 *
 * @param action the action to run on the UI thread
 */
@Override
public final void runOnUiThread(Runnable action) {
    if (Thread.currentThread() != mUiThread) {
        mHandler.post(action);
    } else {
        action.run();
    }
}

$(function (event) { event.preventDefault(); $.post(url, form_id, function (data) { alert('time is up you can no longer proceed'); }); } 是一种jQuery方式,表示你想在页面加载后立即执行一个函数(类似于$(function))。 $(document).ready参数未在该范围内定义。

也许你可能想把这段代码放在其他地方?您可以尝试定义一个单独的函数,在其中调用event并在计时器用完时调用它。

$.post