【发布时间】:2014-04-14 18:43:32
【问题描述】:
我试图帮助某人使用 jQuery 提交表单。他正在提交,并试图将一些文本输出到表单中。但是因为提交;他的脚本在显示所有内容之前就停止了。我能够在提交之前制作一个脚本来显示他的文本,但我想获得更多技术,并让它等待提交,以便能够首先阅读响应。但是,我的setTimeout() 没有循环,并且在preventDefault() 之后表单不会提交关于问题是什么的任何想法?
当前测试代码。我意识到它比它应该的要长得多,但是我现在已经用不同的方法将这段代码分解了 5 次,这是最基本的并向我展示了所有步骤......但什么也没有。
主要问题是它永远不会进入条件if ( run === 1 ) {,就好像 setTimeout 甚至没有循环一次一样。
我还可以在使用按钮时让脚本运行,而不是像 the example here
这样提交按钮更新:代码已修改,现在按原样在 X 秒后发送提交。
var formElm = $('#replyform');
positive = $('input[value="Positive"]'),
negative = $('input[value="Negative"]'),
response = $('#txt1'),
run = 0,
submitnum = 0;
positive.click(function(e) {
e.preventDefault();
submitnum = 1;
setInterval(submits, 1000);
});
negative.click(function(e) {
e.preventDefault();
submitnum = 2;
setInterval(submits, 1000);
});
function submits() {
if ( submitnum === 1) {
submitForm(positive);
} else if ( submitnum === 2 ) {
submitForm(negative);
}
}
function submitForm (e) {
response.val(e.attr('name') + ' was clicked.');
if ( run === 1 ) {
alert('About to submit!');
e.get(0).form.submit();
}
run++
alert(run);
}
如果您对工作压缩代码感兴趣:
这依赖于为按钮设置的类名,以及作为按钮的类型,而不是提交。
$(".button").click(function() {
var buttonName = $(this).attr('name'),
elm = $(this);
$('#txt1').val( buttonName + ' was clicked.' ); // Add response
setTimeout(function(){
elm.get(0).form.submit(); // Submit form
}, 5000); // After 5 seconds
});
【问题讨论】:
-
看起来超时调用的函数没有新的
setTimeout()。setTimeout()在延迟一次后执行一个函数,如果你需要一个“循环”,你可能需要使用setInterval()。 -
@Teemu 谢谢,这完美地完成了循环,但仍然没有提交表单。我添加了
e.form.submit(),它抛出了一个错误,如下所示。我需要它来发送点击按钮的值,如果我提交正确的主表单就不会出现这种情况?
标签: javascript jquery forms submit settimeout