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