我有一个表单,其中包含一个禁用的提交按钮。虽然用户无法点击此按钮,但他仍然可以按 Enter 键提交表单。我该如何防止这种情况发生?
我有一个表单,其中包含一个禁用的提交按钮。虽然用户无法点击此按钮,但他仍然可以按 Enter 键提交表单。我该如何防止这种情况发生?
<form>
元素),那么您需要让其submit
事件处理程序返回false
。<form onsubmit="return false;">
就像之前的回答所指出的那样,您可以在加载期间使用JavaScript / DOM操作来添加它。
如果您只想禁用Enter键提交表单,则需要让其keydown
事件处理程序在事件的key
匹配Enter
时返回false
(这种方法在各种浏览器中兼容,并覆盖了默认的Enter以及数字键盘上的Enter!)。
<form onkeypress="return event.key != 'Enter';">
这会禁用表单中任何 <textarea>
元素中的 Enter 键。如果你有这些元素,并且想要保持它们正常工作,那么你需要从 <form>
删除 onkeydown
,并将其复制到所有 <input>
和 <select>
元素上。使用 jQuery 可以帮助实现此目标:
$('input, select').keydown(event => event.key != 'Enter');
假设有以下HTML代码:
<form id="myForm"> ...
你可以使用JavaScript来实现这个功能:
document.getElementById("myForm").onsubmit = function () {
return false;
};
不要实现两种禁用表单提交的方法,而是将一个事件处理程序添加到表单的onsubmit上,该处理程序将检查按钮的disabled
属性:
myForm.onsubmit = function () {
if (myForm.mySubmit.disabled)
return false;
}
<form id="myForm" action="some_file" method="post">
...
</form>
<script type="text/javascript">
document.getElementById( "myForm").onsubmit = function() {
return false;
};
//or with jQuery: $( '#myForm' ).submit( function() { return false; } );
</script>
<form>
之后放置了<script>
,那么你不需要等待onload
。例如,如果图像仍在加载,则可能会丢失反提交。 - MattmyForm
和我们使用的id
相同。 :) - Jacob Relkin如果您不想编辑表单的onsubmit事件,可以按照以下方法操作。
将此代码添加到文本输入框中:
onKeyPress="return noEnter(event)"
并将以下代码添加到头部:
function noEnter(e) { var key; // 火狐 vs. ie (window.event) ? key = window.event.keyCode : key = e.which; (key == 13) ? return false : return true; }
使用jQuery更容易实现。
jQuery解决方案:
$(document).ready(function(){
$('form[name="form"]').keypress( function(evt){
return !(evt.which==13 && evt.target.type!='textarea');
});
$('form[name="form"] input[type="submit"]').attr('tabIndex',-1); // this prevents submit also by spacebar (keyCode==32)
//$('form[name="form"]').submit(function(){ alert('test'); return false; }); // test
});
document.getElementById("myForm").onsubmit = function () {
return false;
};
这些代码在Chrome和Safari上不起作用。它将表单提交到操作URL。
但是<form onsubmit="return false;">
很有用。