首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >jquery.min.js:2未捕获TypeError: event.preventDefault不是函数

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

Stack Overflow用户
提问于 2018-05-31 16:49:26
回答 2查看 1.4K关注 0票数 -2

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

以下是我的代码

代码语言:javascript
复制
    <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>

我可以做些什么来避免表单重复提交?

EN

回答 2

Stack Overflow用户

发布于 2018-05-31 17:10:12

既然你的html丢失了,但是你写了你想要提交一个,你应该这样做:

代码语言:javascript
复制
$(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就绪函数。

票数 1
EN

Stack Overflow用户

发布于 2018-05-31 16:52:15

罪魁祸首就在这里:

代码语言:javascript
复制
$(function (event) {
    event.preventDefault();
     $.post(url, form_id, function (data) {
          alert('time is up you can no longer proceed');
     });
}

$(function)是一种jQuery方式,表示您希望在页面加载后立即执行函数(类似于$(document).ready)。未在该作用域中定义event参数。

也许你想把这段代码放在别的地方?您可以尝试定义一个单独的函数,在该函数中调用$.post,并在计时器超时时调用它。

代码语言:javascript
复制
function postForm(url, form_id){
    $.post(url, form_id, function (data) {
        alert('time is up you can no longer proceed');
    });
}

function startTimer(duration, display) {
        var timer = duration, minutes, seconds;

        var __timer = setInterval(function () {
            //...........

            if (--timer < 0) {
                clearInterval(__timer);

                var form_id = $('#questionsandanswers').serializeArray();
                var url = $('#questionsandanswers').attr('action');

                postForm(url, form_id);
            }
        },1000);
    }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50620248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档