我有一个函数,当时间到达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>
我可以做些什么来避免表单提交两次
答案 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