Answers:
您可以建立自己的自定义事件
$('textarea').bind("enterKey",function(e){
//do stuff here
});
$('textarea').keyup(function(e){
if(e.keyCode == 13)
{
$(this).trigger("enterKey");
}
});
e.keyCode
对于某些键有不同的用法,更好地使用e.which
,这将确保您在每个浏览器上都可以处理相同的按钮
$('#textbox').on('keypress', function (e) {
if(e.which === 13){
//Disable textbox to prevent multiple submit
$(this).attr("disabled", "disabled");
//Do Stuff, submit, etc..
//Enable the textbox again if needed.
$(this).removeAttr("disabled");
}
});
这是给您的插件:(提琴:http : //jsfiddle.net/maniator/CjrJ7/)
$.fn.pressEnter = function(fn) {
return this.each(function() {
$(this).bind('enterPress', fn);
$(this).keyup(function(e){
if(e.keyCode == 13)
{
$(this).trigger("enterPress");
}
})
});
};
//use it:
$('textarea').pressEnter(function(){alert('here')})
$
变量用于插件不是一个好主意,因为它可能导致冲突。
$("#myInput").bind('click, onEnter', myCallback);
并且不需要其他任何操作吗?
这是一个jQuery插件来做到这一点
(function($) {
$.fn.onEnter = function(func) {
this.bind('keypress', function(e) {
if (e.keyCode == 13) func.apply(this, [e]);
});
return this;
};
})(jQuery);
要使用它,请包含代码并按如下所示进行设置:
$( function () {
console.log($("input"));
$("input").onEnter( function() {
$(this).val("Enter key pressed");
});
});
func.apply(this)
,这样在回调函数中就可以像平常一样使用this
它来访问触发事件的元素。
e.preventDefault(); e.stopPropagation();
内添加即可if (e.keyCode)
。
应该很好注意的是,使用live()
jQuery中已经过时,因为版本1.7
和已删除的jQuery的1.9
。相反,on()
建议使用。
我强烈建议采用以下绑定方法,因为它可以解决以下潜在挑战:
document.body
并将$ selector作为第二个参数传递给on()
,可以在DOM上附加,分离,添加或删除元素,而无需处理重新绑定或双重绑定事件。这是因为事件是附加到document.body
而不是$selector
直接附加的,这意味着$selector
可以添加,删除和再次添加该事件,并且永远不会加载绑定到该事件的事件。off()
before on()
,此脚本可以驻留在页面的主体内,也可以驻留在AJAX调用的主体内,而不必担心意外的双重绑定事件。$(function() {...})
,可以再次在页面主体或AJAX调用主体中加载此脚本。$(document).ready()
不会因为AJAX请求而被解雇,反而会被解雇$(function() {...})
。这是一个例子:
<!DOCTYPE html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
var $selector = $('textarea');
// Prevent double-binding
// (only a potential issue if script is loaded through AJAX)
$(document.body).off('keyup', $selector);
// Bind to keyup events on the $selector.
$(document.body).on('keyup', $selector, function(event) {
if(event.keyCode == 13) { // 13 = Enter Key
alert('enter key pressed.');
}
});
});
</script>
</head>
<body>
</body>
</html>
HTML代码:-
<input type="text" name="txt1" id="txt1" onkeypress="return AddKeyPress(event);" />
<input type="button" id="btnclick">
Java脚本代码
function AddKeyPress(e) {
// look for window.event in case event isn't passed in
e = e || window.event;
if (e.keyCode == 13) {
document.getElementById('btnEmail').click();
return false;
}
return true;
}
您的表单没有默认的提交按钮
另一个细微的变化。我进行了一些分权,所以我有一个插件可以捕获Enter键,然后我通常绑定到事件:
(function($) { $.fn.catchEnter = function(sel) {
return this.each(function() {
$(this).on('keyup',sel,function(e){
if(e.keyCode == 13)
$(this).trigger("enterkey");
})
});
};
})(jQuery);
然后使用:
$('.input[type="text"]').catchEnter().on('enterkey',function(ev) { });
此变体允许您使用事件委托(绑定到尚未创建的元素)。
$('body').catchEnter('.onelineInput').on('enterkey',function(ev) { /*process input */ });
在keypress
阅读jQuery文档之前,我无法为Enter按钮触发事件,并且挠了一下头。
“ 当浏览器注册键盘输入时,会将keypress事件发送到一个元素。这与keydown事件类似,不同之处在于修饰键和非打印键(例如Shift,Esc和delete触发触发器keydown事件,但不是keypress事件。)https://api.jquery.com/keypress/)
我必须使用keyup
or keydown
事件来按回车按钮。