我有一个行为不端的简单搜索功能。搜索框位于我们在搜索时不想提交的表单内,因此我在下面进行了设置。
$(function() {
jQuery.fn.onEnter = function(callback) {
this.keyup(function(e) {
if(e.keyCode == 13) {
e.preventDefault();
//e.stopPropagation();
if (typeof callback == 'function')
callback.apply(this);
}
});
return this;
}
$('#txtSearch').onEnter(function() {
search();
return false;
});
$('#search_btn').click(function() {
search();
return false;
});
function search() {
alert('searching');
}
});
e.preventDefault()行不起作用,因此搜索功能会触发以及表单提交。我已经尝试了e.preventDefault()
和e.stopPropagation()
但没有运气。
答案 0 :(得分:3)
您正在停止浏览器默认keyup
事件而不是submit
事件。最好的办法是使用keydown
,以便输入密钥本身停止。
同样使用e.which
,它是针对crossbrowser标准化的。
您可以尝试添加keydown处理程序以防止输入密钥并在密钥内执行操作。
DEMO: http://jsfiddle.net/PSkvm/1/
jQuery.fn.onEnter = function(callback) {
this.keyup(function(e) {
if(e.keyCode == 13) {
//e.stopPropagation();
if (typeof callback == 'function')
callback.apply(this);
}
}).keydown(function (e) {
if(e.keyCode == 13) {
e.preventDefault();
}
});
return this;
}
答案 1 :(得分:0)
preventDefault()不适用于表单。尝试返回false;代替。
答案 2 :(得分:0)
很可能e.keyCode
未被捕获
var code = e.keyCode || e.which;
将您的代码修改为:
var code = e.keyCode || e.which;
if(code == 13) {
e.preventDefault();
if (typeof callback == 'function')
callback.apply(this);
}