我有一个带有onsumbit属性的表单。我在onsumbit上调用了一个javascript函数。 我需要在表单实际提交之前在隐藏变量上设置一些值。该位在SaveQuery()函数中完成。我还在页面上有一个链接,它提供与提交表单相同的操作。我添加了onsubmit,以便在某人按下Enter键时提交表单。
问题是当使用jquery v1.4.4库时,表单似乎是递归提交的。我该如何避免这种情况发生。使用jquery v1.3.2,似乎没有问题。
表格:
<form id="savequery" action="savedquery.aspx" method="post" onsubmit="SaveQuery(); return false;">
<input type="hidden" id="orig_q" name="orig_q" value="" />
<input type="hidden" id="isFullText" name="isFullText" value="" />
<input id="queryName" name="queryName" value="New Query" />
</form>
<table class="centerButton">
<tbody>
<tr>
<td>
<div id="proceedSave" class="butActive idProceed">
<p>
</p>
<div>
<a href="#" onclick="SaveQuery();">Proceed</a></div>
</div>
<!-- duplicate text item -->
</td>
</tr>
</tbody>
</table>
SaveQuery功能:
SaveQuery = function () {
$("#orig_q").val(document.getElementById("txtQuery").value);
$("#isFullText").val(document.getElementById("chkFulltext").checked);
$("#savequery").submit();
}
答案 0 :(得分:2)
您在 SaveQuery
的{{1}}处理程序以及onsubmit
的点击操作中致电<form>
。然后该函数再次调用<a>
,这将触发调用submit()
的函数,该函数触发函数等等......所以当然它会递归!只需在点击事件上调用submit()
,就可以了。
答案 1 :(得分:2)
不是停止提交并触发它,而是让它通过:
onsubmit="SaveQuery();"
var SaveQuery = function () {
$("#orig_q").val(document.getElementById("txtQuery").value);
$("#isFullText").val(document.getElementById("chkFulltext").checked);
}
答案 2 :(得分:1)
我无法对这两个库之间的差异发表评论,但我建议您对代码进行简单修改即可解决问题。
在您的表单标记中,您有一个onsubmit="SaveQuery();
标签,然后在点击Proceed
时调用此功能。在我看来,这应该呈现你看到的行为,无论早期版本的jQuery是否掩盖它。
只需执行此onsubmit
声明即可。
随机红利评论
您正在混合JavaScript和jQuery DOM交互方法。为什么不使用jQuery:
$("#orig_q").val($("#txtQuery").val());
$("#isFullText").val($("#chkFulltext").attr("checked"));