【问题标题】:Set variable inside keypress() event and get one inside keyup() event在 keypress() 事件中设置变量并在 keyup() 事件中获取一个
【发布时间】:2013-10-30 04:39:20
【问题描述】:

我有一些代码结合了 .keypress().keyup() 事件:

    $(this).on('keypress keyup', function (e) {
        var layout = 'undefined';
        if (e.type == "keypress") {
            // set layout
            layout = 'en';    
        } else {
            // use layout
            alert(layout);
        }
    });

我们知道顺序是 .keydown() -> .keypress() -> .keyup()。但是在 .keyup() 上,事件变量 layout 始终是 undefined

我做错了什么?

【问题讨论】:

  • 在这个 wahta 中是 $(this) 是输入吗?
  • 当按键发生时,它初始化为“未定义”,然后进入 if 部分并设置为“en”,但在 keyup 事件中它再次初始化为“未定义”,这一次它进入 else 部分和不会设置为“en”。所以解决方案只是定义你的变量layourglobel,这样它就不会在keypress和keyup事件中初始化。
  • 好的,索希尔!这是我的错。

标签: jquery keypress keyup


【解决方案1】:

layout 变量移到事件函数之外 - 您将在每个事件中将其重置为 'undefined'

var layout = 'undefined';
$(this).on('keypress keyup', function (e) {
    if (e.type == "keypress") {
        // set layout
        layout = 'en';    
    } else {
        // use layout
        alert(layout);
    }
});

【讨论】:

    【解决方案2】:

    使您的 layout 变量全局化

    var layout = 'undefined';
    $(this).on('keypress keyup', function (e) {
        if (e.type == "keypress") {
            // set layout
            layout = 'en';    
        } else {
            // use layout
            alert(layout);
        }
    });
    

    【讨论】:

      【解决方案3】:

      试试这个,

      HTML

      <input />
      

      脚本

       var layout = 'undefined';
       $('input').on('keypress keyup', function (e) {
           if (e.type == "keypress") {
               // set layout
               layout = 'en';
           } else {
               // use layout
               alert(layout);
           }
       });
      

      Demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-23
        • 1970-01-01
        • 2015-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多