setTimeout只循环一次,不提交表单?

时间:2014-04-14 18:43:32

标签: javascript jquery forms submit settimeout

我试图用jQuery提交表单帮助某人。他正在提交,并尝试将一些文本输出到表单。但是因为提交;在显示所有内容之前,他的剧本已停止。我能够在提交之前制作一个脚本来显示他的文本,但我希望获得更多技术,并让它等待提交,以便能够首先阅读响应。但是,我的setTimeout()没有循环播放,并且在preventDefault()之后表格不会提交任何有关问题的想法?

JSFIDDLE (原始已损坏Fiddle

当前测试代码。我意识到它应该比它长得多,但我现在用不同的方法将这段代码打破了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
 });

2 个答案:

答案 0 :(得分:1)

尝试使用

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);
}

http://jsfiddle.net/ZUUs7/11/

答案 1 :(得分:1)

使用$.post提交表单。

通过这种方式,您可以附加在成功提交表单时运行的成功函数。

演示:http://jsfiddle.net/ZUUs7/27/