2

我有一个预先输入的文本字段,当用户点击“Enter”时,我想进行 ajax 调用而不是同时提交表单。我的 html 看起来像这样:

<input id="drug_name" class="drugs_field" type="text" size="30" onkeypress="handleKeyPress(event,this.form); return false;" name="drug[name]" autocomplete="off"/>
<div id="drug_name_auto_complete" class="auto_complete" style="display: none;"/>
<script type="text/javascript">
  //<![CDATA[
  var drug_name_auto_completer = new Ajax.Autocompleter('drug_name', 'drug_name_auto_complete', '/sfc/pharmacy/auto_complete_for_drug_name', {})
  //]]>
</script>
4

4 回答 4

6

您应该向表单本身添加一个事件处理程序,该处理程序调用一个函数来决定要做什么。

<form onsubmit="return someFunction();">

然后确保您的 someFunction() 在成功时返回 false。如果它返回 true,则表单将正常提交(这是您试图阻止的!)。所以你可以做你的 AJAX 调用,看看它是否成功,然后返回 false。

这样做可以在 AJAX 调用失败的情况下提供回退,并通过从函数返回 true 来正常提交表单。

于 2008-11-10T19:07:55.193 回答
2

捕获事件并取消它。

它类似于陷阱 onSubmit(event) 和 event.ignoreDefault()。该事件可以告诉您它是由击键触发的,以及是哪个触发的。

于 2008-11-10T18:58:31.610 回答
1

您可以使用在单击时提交表单的常规按钮而不是提交按钮。

如果您希望回车键在其他字段中起作用,只需在此处处理并提交表单即可。

于 2008-11-10T19:01:05.583 回答
1

在按钮的输入元素中执行:

<input type='submit' value='submit' onclick='submiFunction(); return false;'>

或在表格本身

<form blabla onsubmit='someAjaxCall(); return false;'>

这应该会阻止表单提交。
return false 是实际阻止表单提交的操作(它取消当前事件,即 sbumit)

于 2008-11-10T19:03:42.783 回答