当用户单击另一个表单中的按钮时,带有onchange的输入字段无法触发

时间:2013-05-02 23:32:25

标签: javascript jquery javascript-events

我有一个页面上有多个小表单。每个表单都有一个输入字段,该字段具有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>

2 个答案:

答案 0 :(得分:1)

可能完全无关紧要,但更改事件的选择器也包含您的提交输入。你能把它改成:

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

看是否有任何变化?

答案 1 :(得分:0)

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

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