我有一个页面上有多个小表单。每个表单都有一个输入字段,该字段具有onchange功能,该功能将其表单提交给返回无数据状态的URL。
事情很好,在表单之后转换形式,直到用户点击只有一个提交按钮的小表单。此单击有效,但放弃前一个字段中的更改导致其onchange不触发更改函数底部的单击失败(仍尝试理解firebug跟踪)。
发生了什么事?我的结构有什么问题吗?
更新
首先,我试图简单地推迟提交的动作,但没有运气。
我隐藏了并添加了一个“事件”链,以便在实际提交尝试发生之前焦点有一个休息的地方 - 下面的代码已经更新。所以问题现在变成了:
这是否尽可能简单?
脚本:
$(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>
答案 0 :(得分:1)
可能完全无关紧要,但更改事件的选择器也包含您的提交输入。你能把它改成:
$('input[type="text"],select').change(changed);
看是否有任何变化?
答案 1 :(得分:0)
解决方案原来是创建一个按钮标记,将焦点显式设置为它,然后设置超时以单击真实但隐藏的提交输入标记。这允许更改焦点以运行与其关联的提交,然后继续显式提交页面。
问题已更新,以显示此解决方案。