2013-05-02 67 views
0

我有一个包含多个小表单的页面。每个表单都有一个输入字段,它具有一个onchange函数,将它的形式提交给返回无数据状态的url。当用户单击另一个表单中的按钮时,带有onchange的输入字段无法触发

事情工作正常,在表单之后发送表单,直到用户点击一个只有一个提交按钮的小表单。这个点击工作,但放弃在前一个领域的变化,导致其onchange不发射更改功能的底部点击失败(仍试图了解萤火虫跟踪)。

发生了什么事?有没有解决我的结构?

UPDATE:

开始我尝试简单地推迟其提交的动作,但没有运气。

我已经隐藏并添加了一个“事件”链,以便重点有一个地方可以在真正的提交尝试发生之前休息 - 下面的代码已更新。所以现在的问题变成:

这是否如此简单?


脚本:

$(function() { 
    $('input,select').change(changed); 
}); 
function changed(){ 
    ... 
    $(this).parents('form').find(':submit').click(); 
} 
function doSubmit(elt, id) 
{ 
    $(elt).focus(); 
    setTimeout(function(){ 
     $(id).click(); 
    }, 400); 
} 

一个可以小形式:

<form class="clean" method="POST" action="QuoteProApp.php"> 
    <input type="submit" value="field" name="btn_update" style="display: none;"> 
    <input type="hidden" value="000242" name="quote_id"> 
    <input type="text" maxlength="15" size="3" value="" name="q[cost][4][1][unit]"> 
</form> 

的违规点击进入这种形式:

<form class="clean" method="POST" action="QuoteProApp.php"> 
    <input type="hidden" value="000242" name="quote_id"> 
    <input type='button' name='btn_close' value='Close' onclick='doSubmit(this,"#CLOSE");'> 
    <input id='CLOSE' type='submit' name='btn_close' value='Close' style='display:none;'> 
</form> 
+2

是否因为浏览器不想一次提交两个表单,所以提交按钮的结果优先? – nnnnnn 2013-05-02 23:55:42

+0

我试过这个,无法复制它(在Firefox中,jQuery 1.8.3)。你能更清楚地了解bug是如何被再现的?例如,当你在一个字段中输入文本时会发生什么,并且在输入形式A的最后一个文本字母之后的下一个动作是单击表单X中的提交按钮?请在你的问题中澄清这一点。 – BobS 2013-05-03 00:04:54

+0

考虑到两个提交按钮,我添加了一个按钮中间步骤,似乎已经工作(问题更新为进一步照明。) – Don 2013-05-03 14:46:27

回答

0

解决方案原来是创建一个按钮标记,明确地将焦点设置为它,然后设置超时以单击真实但隐藏的提交输入标记。这允许焦点变化运行与其关联的提交,然后继续显式提交页面。

此问题已更新以显示此解决方案。

1

可能完全不相关,但您的更改事件选择器也包含您的提交输入。您是否可以将其更改为:

$('input[type="text"],select').change(changed); 

查看是否有任何更改?

+0

好吧,试过这个,但它没有区别。在我看来,事实上,我点击了提交按钮和FF,现在已经不知道被重定向到首先提交不同的表单的想法。 – Don 2013-05-03 13:56:48

相关问题