0

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

<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>

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

4

2 回答 2

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

...虽然不知道问题中未包含的内容,但我无法确定它是否会起作用。

于 2013-07-13T03:29:17.613 回答
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>将几乎被忽略
  • 函数中的函数很好

但从粗略的语法来看,问题是,它是否真的在做你想要的?

于 2013-07-13T03:31:40.657 回答