我设置了一键跳过/更改页面功能。 但是当用户想要在输入文本或文本区域中键入“0”时,一键功能也会生效并更改为另一页。
当用户使用文本输入或文本区域时,如何忽略此java脚本?
document.onkeydown=nextpage;
function nextpage(){
var event=document.all?window.event:arguments[0];
if (event.keyCode==13) location="#skipcontent";
if (event.keyCode==48) location="contact-us.php";
}
答案 0 :(得分:2)
检查target
元素以查看事件定位的元素:
document.onkeydown=nextpage;
function nextpage(e){
var event = document.all ? window.event : e;
switch (e.target.tagName.toLowerCase()) {
case "input":
case "textarea":
case "select":
case "button":
// ...and so on for other elements you want to exclude;
// list of current elements here: http://www.w3.org/TR/html5/index.html#elements-1
break;
default:
if (event.keyCode==13) location="#skipcontent";
if (event.keyCode==48) location="contact-us.php";
break;
}
}
或者代替switch
,您可以使用带有替换的正则表达式:
document.onkeydown=nextpage;
function nextpage(e){
var event = document.all ? window.event : e;
if (!/^(?:input|textarea|select|button)$/i.test(e.target.tagName)) {
if (event.keyCode==13) location="#skipcontent";
if (event.keyCode==48) location="contact-us.php";
}
}
附注:您可能会考虑使用addEventListener
,这在所有现代浏览器上都受支持,并允许每个元素的每个事件有多个处理程序。如果你必须支持IE8,this answer有一个你可以使用的函数,它可以回退到attachEvent
并为你处理事件对象shuffle。