如何阻止Web表单在“Enter”上提交

时间:2008-11-10 18:54:59

标签: javascript html ruby-on-rails webforms

我有一个提前输入文本字段,当用户点击“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 个答案:

答案 0 :(得分:6)

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

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

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

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

答案 1 :(得分:2)

捕获事件并取消它。

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

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

或表格本身

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

哪个应该停止提交表单。
返回false是实际停止提交表单的操作(它取消当前事件,这是sbumit)