jquery表单提交需要两次click-submit发送

时间:2013-07-13 03:16:39

标签: jquery forms submit

我有一个表单,但我必须单击两次按钮才能提交。我的代码是:

<script>
    function processorform(id)
    {   
        jQuery('.sp-poll-'+id+' form').submit(formProcess);

        function formProcess(e) 
        {
            e.preventDefault();

            var poll = id;
            answer  = $('input[name=answer]:checked').val(),
            div     = $(this).parent(),
            action  = $(this).attr('action');

            $(this).show();
            updatePoll(action, poll, answer);
            $("#poll-"+id).hide();
    }
}
</script>

表格:

<form method="post" action="<?php echo $postFile;?>" class="format" id="spe_form-<?php echo $pollid; ?>" onsubmit="processorform('<?php echo $pollid; ?>');return false;">
    <input type="hidden" name="poll" value="<?php echo $pollid; ?>"/>
    <input type="hidden" name="backurl" value="<?php echo $thisPage; ?>"/>
</form>

除了必须点击提交两次外,一切正常。

2 个答案:

答案 0 :(得分:1)

第一次点击提交将调用内联提交处理程序:

onsubmit="processorform('<?php echo $pollid; ?>');return false;"

由于processorform(),会调用return false;并阻止正常表单提交。

processorform()函数反过来通过jQuery绑定一个提交处理程序,我假设它是相同的形式(虽然你没有显示包含该表单的元素的html):

jQuery('.sp-poll-'+id+' form').submit(formProcess);

然后在下一次单击时,它将再次执行内联处理程序再次运行上述函数,现在将执行从上一次单击绑定的提交处理程序formProcess()

我只能假设您的实际提交来自以下行:

updatePoll(action, poll, answer);

...调用你没有显示的函数。

我不明白表格是如何提交的,因为它不包含任何可见字段或按钮,但无论如何......

我猜最简单的解决点击两次问题的方法是这样的:

function processorform(id) {
    var $form = jQuery('.sp-poll-' + id + ' form'),
        poll = id,
        answer = $('input[name=answer]:checked').val(),
        div = $form.parent(),
        action = $form.attr('action');

    $form.show();
    updatePoll(action, poll, answer);

    $("#poll-" + id).hide();
}

...虽然不知道你没有在问题中包含的内容我不能确定它会起作用。

答案 1 :(得分:0)

也可能存在语法错误:

function processorform(id)
{   

jQuery('.sp-poll-'+id+' form').submit(formProcess);

// missing '}' ???

<script>  // this is already a script, why start a new script tag?

function formProcess(e) 
{
e.preventDefault();

var poll = id;

answer  = $('input[name=answer]:checked').val(),
div     = $(this).parent(),
action  = $(this).attr('action');



$(this).show();
updatePoll(action, poll, answer);

$("#poll-"+id).hide();


}

} // too many '}' ??
</script> // see above

以上代码将“运行”

  • <script>几乎会被忽略
  • 函数中的函数很好

但从粗俗的语法来看,问题是,它是否真的按照你的意图行事?