0

我有一个页面上有多个小表格。每个表单都有一个输入字段,该字段具有一个 onchange 函数,该函数会将其表单提交到返回无数据状态的 url。

一切正常,一个接一个地提交表单,直到用户单击一个只有一个提交按钮的小表单。此点击有效,但放弃前一个字段中的更改导致其 onchange 未触发更改功能底部的单击失败(仍在尝试了解萤火虫跟踪)。

这是怎么回事?我的结构有修复吗?

更新:

首先,我尝试简单地延迟提交的操作,但没有运气。

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

这是尽可能简单吗?


脚本:

$(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>
4

2 回答 2

1

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

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

看看有没有什么变化?

于 2013-05-02T23:50:37.717 回答
0

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

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

于 2013-09-26T19:53:04.987 回答