停止全局功能
stopping global functionality
我正在处理一个遗留应用程序,我发现了这个javascript片段:
function keypress(e) {
var evt = (e) ? e : window.event;
switch (evt.keyCode) {
case 9:case 13: {
...
}
这一直工作得很好,但是我使用从<div>
的onKeyPress
调用的特定函数为应用程序添加了新的功能,我们称之为function xyz()
。除了按下回车键外,此功能非常有效。在我的新函数中,我可以捕获键码13(回车键),但我不能阻止它转到上面的这个函数。当在我的新功能中按Enter键时,上面的代码会导致它出错。
我需要一种方法来防止回车键转到keypress(e)
函数(上面)。有什么办法可以阻止它这样做吗?
function xyz(event)
{
if(event.keyCode == 13){
// I need to stop the process of the Enter key here
...
}
}
这个解决方案应该完全不引人注目,只是测试了类似的东西:
new function() {
var old_kp = window.keypress;
delete window.keypress;
window.keypress = function(e) {
switch (evt.keyCode) {
case 13: /* do your thing */
default: {
return old_kp(e);
}
}
}
}();
你可以像以前一样调用函数,它包装旧的函数,在'13'以外的情况下,你只需要委托给旧的实现。
编辑:
要取消'Enter'键事件的传播,请查看将其关闭一节。它会告诉你如何以跨浏览器兼容的方式阻止传播:
function xyz(e) {
if(event.keyCode == 13) {
if (!e) var e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
}
}
旧版本的IE不传递事件到事件处理程序,你需要检索窗口。事件。这就是为什么我们首先检查e是否被赋值,如果没有,我们赋值window。cancelBubble属性也是特定于IE的,设置它对IE和其他浏览器都有效,它们只是忽略了这个属性。最后检查的是该事件是否存在stopPropagation方法。stopPropagation是W3C事件模型推荐的解决方案。所有现代浏览器都支持此功能(包括ie9)。使用此代码,您将涵盖所有现有的在所有或多或少现代浏览器中停止事件传播的可能性。
我想你应该这样写:
function keypress(e) {
var evt = (e) ? e : window.event;
switch (evt.keyCode) {
case 9: {
...}
break;
case 13: ...//your code
break;
}
让事件监听器先监听你的函数,然后再调用keypress
?
我可能误解了你的问题,你应该能够在switch语句中分隔"Enter"大小写,如下所示:
function keypress(e) {
var evt = (e) ? e : window.event;
switch (evt.keyCode) {
case 9:
//Tab Key Pressed
break;
case 13:
//Enter Key Pressed
break;
}
}
为了在keypress中停止执行,您可以检查在switch语句之前按了哪个键,或者在case 13中只检查return false
:
function keypress(e) {
var evt = (e) ? e : window.event;
if(evt.keyCode != 13)
{
switch (evt.keyCode) {
case 9:
//Tab Key Pressed
break;
case 13:
//Enter Key Pressed
break;
}
}
}
或
function keypress(e) {
var evt = (e) ? e : window.event;
switch (evt.keyCode) {
case 9:
//Tab Key Pressed
break;
case 13:
return false;
break;
}
}
- 全局变量和全局对象的属性之间有什么区别吗
- 添加文字和评论功能更新Div
- JavaScript打印功能使日历停止工作
- 正在全局范围中查找JavaScript函数
- delete关键字在全局变量上的不同行为
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 在javascript函数中设置全局变量
- 如何将getJson的响应保存在全局变量中
- 如何防止网页加载后自动启动功能
- 全局对象是属于哪个类的对象
- 除修剪外的其他功能
- 悬停功能触发器
- Javascript全局onclick监听器
- JS全局/功能范围理解
- 为剑道UI窗口添加全局功能
- Aurelia的全局功能
- 停止全局功能
- Gulp通知全局成功功能
- 在服务器、客户端和所有文件之间共享Meteor功能,而不声明它们为全局文件
- JavaScript使对象一个全局窗口对象?(无冲突功能)