我有一个表单,但我必须单击两次按钮才能提交。我的代码是:
<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>
除了必须点击提交两次外,一切正常。
答案 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>
几乎会被忽略但从粗俗的语法来看,问题是,它是否真的按照你的意图行事?