是否可以仅在表单元素之外触发键事件?
背景:我有一个代码,当按下右键时会加载下一页。但是如果有人在表单元素中使用该键,我不想触发该事件。
当前代码:
$(document).keydown(function(e){
if (e.keyCode == 37) {
var url = $('a#left').attr("href");
if (url != '') { // require a URL
window.location = url; // redirect
}
return false;
}
if (e.keyCode == 39) {
var url = $('a#right').attr("href");
if (url != '') { // require a URL
window.location = url; // redirect
}
return false;
}
});
答案 0 :(得分:2)
这是概念的基本示例。您只需向文档添加一个事件处理程序,并检查其目标是否没有父表单。
<强> HTML 强>
<form>
Inside form
<input/>
</form>
Outside form
<input />
<强>的Javascript 强>
$(document).keyup(function(event){
if($(event.target).parents("form").length == 0){
alert("here");
}
});
工作POC: http://jsfiddle.net/48NYE/
此概念可以轻松应用于您提供的脚本。
修改脚本
$(document).keydown(function(e){
var outsideForm = $(e.target).parents("form").length == 0;
if (e.keyCode == 37 && outsideForm) {
var url = $('a#left').attr("href");
if (url != '') { // require a URL
window.location = url; // redirect
}
return false;
}
if (e.keyCode == 39 && outsideForm){
var url = $('a#right').attr("href");
if (url != '') { // require a URL
window.location = url; // redirect
}
return false;
}
});
答案 1 :(得分:2)
如果您的表单外有其他字段,这可能非常有用,我希望
的 LIVE DEMO 强>
document.onkeyup = function( ev ){
var key = ev.which || ev.keyCode ,
aID = { 37:"left", 39:"right" };
if( ! (/INPUT|TEXTAREA/i.test(ev.target)) && aID[key]) {
var url = document.getElementById( aID[key] ).getAttribute('href');
window.location = url;
}
};