我试图帮助某人使用 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
});
最佳答案
尝试使用
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);
}
关于javascript - setTimeout只循环一次,不提交表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23067778/