2016-02-24 86 views
0

我正在使用一个脚本(impress.js),该脚本将一些特定的动作绑定到左键,右键,上下箭头的keyup和keydown事件。恢复默认值的箭头键

在某些特定时刻(例如,在输入textarea时),我想回到箭头的默认行为。

我尝试没有成功与

$("a#show-ta").click(function() {  
    document.addEventListener("keydown", function (event) { 
    if (event.keyCode >= 37 && event.keyCode <= 40) { 
     return; 
    } 
    }); 
    document.addEventListener("keyup", function (event) { 
    if (event.keyCode >= 37 && event.keyCode <= 40) { 
     return; 
    } 
    }); 
}); 

其中a#show-ta是显示我的textarea的按钮。

+1

我建议使用一个标志时textarea的具有焦点绕过正常的事件处理程序 –

+0

@RobM。你能给我更多的细节吗?我不是那么专业 – Red

回答

1

你想防止按键向上冒泡到文档在那里(我认为)的Impress结合它的处理程序:如果你需要在一个特定区域的情况下,如texarea,你应该

$("textarea").on('keyup keydown keypress', function(e) { 
    e.stopPropagation(); 
}); 
+0

谢谢,这正是我需要的,我会接受答案 – Red

1

阻止事件的传播是这样的:

$('textarea').keydown(function(ev) { 
    ev.stopPropagation(); 
}); 

如果事件所必需的整个页面,但要排除当你在一个文本,例如,你可以提高你将验证在一个标志事件。

var keydownActivated = true; 

$('textarea').keydown(function(ev) { 
    if (keydownActivated) { 
     ev.preventDefault(); 
     // dostuff 
    } 
}); 
0

这或多或少会让你走到哪里。创建一个跟踪文本区域是否有焦点的标志,并检查当前按键事件处理程序中的该标志。我不能看到所有的代码,所以这只是一个简单的例子:

var textareaHasFocus = false; 

var textarea = document.querySelector('#yourTextarea'); 
textarea.addEventListener('focus', function(event) { 
    textareaHasFocus = true; 
}, false); 

textarea.addEventListener('blur', function(event) { 
    textareaHasFocus = false; 
}, false); 

document.addEventListener("keydown", function (event) { 
    if (textareaHasFocus) return true; 
    // your current keyboard handler 
}); 
document.addEventListener("keyup", function (event) { 
    if (textareaHasFocus) return true; 
    // your current keyboard handler 
});