停止全局功能

stopping global functionality

本文关键字:功能 全局      更新时间:2023-09-26

我正在处理一个遗留应用程序,我发现了这个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;
         }
    }