Koo*_*Inc 96
[ 2012年修订版,没有内联处理程序,保留textarea输入处理]
function checkEnter(e){
e = e || event;
var txtArea = /textarea/i.test((e.target || e.srcElement).tagName);
return txtArea || (e.keyCode || e.which || e.charCode || 0) !== 13;
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以在表单上定义一个按键处理程序:
<form [...] onkeypress ="return checkEnter(event)">
document.querySelector('form').onkeypress = checkEnter;
Run Code Online (Sandbox Code Playgroud)
the*_*man 55
这是一个jQuery处理程序,可用于停止输入提交,还可以停止退格键 - >返回."keyStop"对象中的(keyCode:selectorString)对用于匹配不应触发其默认操作的节点.
请记住,网络应该是一个可访问的地方,这打破了键盘用户的期望.也就是说,在我的情况下,我正在处理的Web应用程序无论如何都不喜欢后退按钮,因此禁用其关键快捷键就可以了."应该进入 - >提交"讨论很重要,但与实际问题无关.
以下是代码,由您来考虑可访问性以及您实际想要执行此操作的原因!
$(function(){
var keyStop = {
8: ":not(input:text, textarea, input:file, input:password)", // stop backspace = back
13: "input:text, input:password", // stop enter = submit
end: null
};
$(document).bind("keydown", function(event){
var selector = keyStop[event.which];
if(selector !== undefined && $(event.target).is(selector)) {
event.preventDefault(); //stop event
}
return true;
});
});
Run Code Online (Sandbox Code Playgroud)
Pau*_*jan 46
只需从onsubmit处理程序返回false
<form onsubmit="return false;">
Run Code Online (Sandbox Code Playgroud)
或者如果你想在中间处理一个处理程序
<script>
var submitHandler = function() {
// do stuff
return false;
}
</script>
<form onsubmit="return submitHandler()">
Run Code Online (Sandbox Code Playgroud)
mtn*_*ner 44
//Turn off submit on "Enter" key
$("form").bind("keypress", function (e) {
if (e.keyCode == 13) {
$("#btnSearch").attr('value');
//add more buttons here
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
has*_*ash 24
您将不得不调用此函数,它将取消窗体的默认提交行为.您可以将其附加到任何输入字段或事件.
function doNothing() {
var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
if( keyCode == 13 ) {
if(!e) var e = window.event;
e.cancelBubble = true;
e.returnValue = false;
if (e.stopPropagation) {
e.stopPropagation();
e.preventDefault();
}
}
Run Code Online (Sandbox Code Playgroud)
Dan*_*man 16
ENTER键仅激活表单的默认提交按钮,这将是第一个
<input type="submit" />
Run Code Online (Sandbox Code Playgroud)
浏览器在表单中找到.
因此,没有提交按钮,但有类似的东西
<input type="button" value="Submit" onclick="submitform()" />
Run Code Online (Sandbox Code Playgroud)
编辑:回应评论中的讨论:
如果您只有一个文本字段,则这不起作用 - 但在这种情况下可能是所需的行为.
另一个问题是,这依赖于Javascript来提交表单.从可访问性的观点来看,这可能是一个问题.这可以通过写来解决<input type='button'/>使用JavaScript,然后放了<input type='submit' />一个内<noscript>标签.这种方法的缺点是,对于禁用javascript的浏览器,您将在ENTER上提交表单.在这种情况下,由OP决定什么是期望的行为.
我知道在没有调用javascript的情况下无法做到这一点.
Tar*_*rik 12
简单回答纯Javascript是:
<script type="text/javascript">
window.addEventListener('keydown', function(e) {
if (e.keyIdentifier == 'U+000A' || e.keyIdentifier == 'Enter' || e.keyCode == 13) {
if (e.target.nodeName == 'INPUT' && e.target.type == 'text') {
e.preventDefault();
return false;
}
}
}, true);
</script>
Run Code Online (Sandbox Code Playgroud)
这仅禁用输入type ='text'的"Enter"按键操作.访问者仍然可以在整个网站上使用"Enter"键.
如果你想为其他动作禁用"Enter",你可以添加console.log(e); 为了您的测试目的,并在Chrome中点击F12,转到"控制台"选项卡并点击页面上的"退格"并查看其中的内容以查看返回的值,然后您可以定位所有这些参数以进一步增强代码以上是为了满足你对"e.target.nodeName","e.target.type"以及更多......的需求......
小智 9
我在这个主题,这里或其他帖子中找到的所有答案都有一个缺点,那就是它也阻止了表单元素上的实际更改触发器.因此,如果您运行这些解决方案onchange事件也不会被触发.为了克服这个问题,我修改了这些代码并为自己开发了以下代码.我希望这对其他人有用.我给了我的表单"prevent_auto_submit"一个类,并添加了以下JavaScript:
$(document).ready(function()
{
$('form.prevent_auto_submit input,form.prevent_auto_submit select').keypress(function(event)
{
if (event.keyCode == 13)
{
event.preventDefault();
$(this).trigger("change");
}
});
});
Run Code Online (Sandbox Code Playgroud)
过去,我总是使用上面的按键处理程序来完成此操作,但今天遇到了一个更简单的解决方案。回车键仅触发表单上的第一个未禁用的提交按钮,因此实际上所需要做的就是拦截试图提交的按钮:
<form>
<div style="display: none;">
<input type="submit" name="prevent-enter-submit" onclick="return false;">
</div>
<!-- rest of your form markup -->
</form>
Run Code Online (Sandbox Code Playgroud)
而已。按键操作将由浏览器/ fields / etc等照常处理。如果触发了“输入-提交”逻辑,则浏览器将找到该隐藏的“提交”按钮并将其触发。然后javascript处理程序将阻止该细分。
我花了一些时间为IE8,9,10,Opera 9 +,Firefox 23,Safari(PC)和Safari(MAC)制作这个跨浏览器
JSFiddle示例: http ://jsfiddle.net/greatbigmassive/ZyeHe/
基本代码 - 通过附加到表单的"onkeypress"调用此函数,并将"window.event"传递给它.
function stopEnterSubmitting(e) {
if (e.keyCode == 13) {
var src = e.srcElement || e.target;
if (src.tagName.toLowerCase() != "textarea") {
if (e.preventDefault) {
e.preventDefault();
} else {
e.returnValue = false;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
237697 次 |
| 最近记录: |