2008-11-10 129 views
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> 

回答

6

您应该添加一个事件处理程序,它调用一个函数来决定做什么形式本身停止形式的行动。

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

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

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

2

捕获事件并取消它。

这就像陷阱onSubmit(event)和event.ignoreDefault()。该事件可以告诉你它是由按键触发的,哪个是触发的。

1

你可以使用一个常规的按钮来提交表单上的点击,而不是你的提交按钮。

如果您希望Enter键在其他字段中工作,只需在那里处理并提交表单即可。

在按钮的输入元素
1

做:

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

或窗体本身

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

应从停止提交表单上。
返回假的,实际上从提交(它取消当前的事件,这是sbumit)

+0

我认为事件仍然会冒泡到默认值,除非您明确地取消它。 – dkretz 2008-11-10 19:06:42