input触发button点击

我有一个页面有两个button。 一个是<button>元素,另一个是<input type="submit"> 。 button按顺序出现在页面上。 如果我在表单中的任何位置的文本字段中,然后按<Enter> ,则触发button元素的click事件。 我认为这是因为button元素第一。

我找不到任何看起来像设置默认button的可靠方法,也不一定要在这一点上。 在没有任何更好的情况下,我已经捕获了表单上任何地方的按键,如果是按下的<Enter>键,我只是否定它:

 $('form').keypress( function( e ) { var code = e.keyCode || e.which; if( code === 13 ) { e.preventDefault(); return false; } }) 

据我目前所知,这似乎在起作用,但感觉令人难以置信。 有没有人知道这样做的更复杂的技术? 同样,这个解决scheme有什么缺陷,我只是不知道?

谢谢。

运用

 <button type="button">Whatever</button> 

应该做的伎俩。

原因是因为表单中的button的types隐式设置为submit 。 正如zzzzBoz所说,规范说,第一个buttontype="submit" input是在这种情况下触发的。 如果你专门设置了type="button" ,那么浏览器就不会考虑它了。

阅读HTML规范以真正理解期望的行为是非常重要的:

HTML5规范明确规定了implicit submissions发生的情况 :

表单元素的默认button是树形次序中的第一个提交button,其表单所有者是该表单元素。

如果用户代理支持让用户隐式地提交表单(例如,在某些平台上,当文本字段集中隐式提交表单时,在“Enter”键上),那么对于默认button具有定义的激活的表单行为必须使用户代理在该默认button上运行合成单击激活步骤。

这在HTML4规范中没有明确说明,但是浏览器已经实现了HTML5规范中描述的内容(这就是为什么它被明确包含)。

编辑添加:

我能想到的最简单的答案是把你的提交button作为表单中的第一个[type="submit"]项,用css在表单底部添加填充,并将提交button绝对放置在你的底部我喜欢它。

我不认为你需要JavaScript或CSS来解决这个问题。

根据button的html 5规范 ,没有type属性的button被视为与其types设置为“submit”的button相同,即作为用于提交其包含的表单的button。 将button的types设置为“button”应该可以防止您看到的行为。

我不确定浏览器是否支持这个function,但是在html 4.01规范中为button指定了相同的行为,所以我期望它很好。

通过在关注的<input type="text">上按下“Enter”键,可以触发第一个定位元素上的“click”事件: <button><input type="submit"> 。 如果您在<textarea>按“Enter”,则只需创build一个新的文本行。

看到这里的例子。

你的代码可以防止在<textarea>创build一个新的文本行,所以你只需要<input type="text">

但为什么你需要在文本字段中按Enter ? 如果要通过按“Enter”提交表单,但是<button>必须保持在布局中的第一个位置,只需使用标记:在<button>之前放置<input type="submit">代码并使用CSS保存你需要的布局。

捕捉“input”并保存标记:

 $('input[type="text"]').keypress(function (e) { var code = e.keyCode || e.which; if (code === 13) e.preventDefault(); $("form").submit(); /*add this, if you want to submit form by pressing `Enter`*/ }); 

您可以使用JavaScript来阻止表单提交,直到适当的时间。 一个非常粗略的例子:

 <form onsubmit='return false;' id='frmNoEnterSubmit' action="index.html"> <input type='text' name='txtTest' /> <input type='button' value='Submit' onclick='document.forms["frmNoEnterSubmit"].onsubmit=""; document.forms["frmNoEnterSubmit"].submit();' /> </form> 

按回车键仍然会触发表单提交,但是JavaScript会阻止它实际提交,直到您实际按下button。

按下input表单的文本字段将默认提交表单。 如果你不希望它以这种方式工作,你必须捕获input按键,并像你这样做消耗。 这是没有办法的。 即使窗体中没有button,它也会以这种方式工作。

我会这样做:在button的onclick事件处理程序(不提交)检查事件对象的键代码。 如果是“input”,我会返回false。

我添加了一个types为“submit”的button作为表单的第一个元素,使其不可见( width:0;height:0;padding:0;margin:0;border-style:none;font-size:0; )。 像刷新网站一样工作,即当button被按下时,我不做任何事情,除了站点被再次加载。 对我来说工作很好…