【问题标题】:jQuery alternative for document.activeElementdocument.activeElement 的 jQuery 替代品
【发布时间】:2011-03-20 16:34:00
【问题描述】:

我想做的是弄清楚用户何时使用 INPUT 或 TEXTAREA 元素并将变量标志设置为 true...并在用户不再使用它们后立即将该标志设置为 false(即. 他们点击了 INPUT/TEXTAREA 元素)。

我使用 jQuery 的 docuemnt.ready 函数将 onclick 属性添加到我的 body 元素并将其分配给我的 getActive() 函数。

getActive()函数的代码如下:

函数 getActive() { activeObj = document.activeElement; var inFocus = 假; if (activeObj.tagName == "INPUT" || activeObj.tagName == "TEXTAREA") { 焦点=真; } }

我真的很想继续使用 jQuery 框架,但似乎找不到使用 JUST jQuery 语法完成上述相同逻辑的方法。

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    您需要焦点和模糊事件处理程序。比如……

    var inFocus = false;
    $('input, textarea').focus(function() {
      inFocus = true;
    });
    
    $('input, textarea').blur(function() {
      inFocus = false;
    });
    

    我很确定逗号会让您输入 OR textarea,但如果不成功,您就会明白

    【讨论】:

    • 我把它放进去,但是当用户开始输入 INPUT 或 TEXTAREA 元素时,它似乎没有被调用。
    • 作为上述内容的补充,我对 JavaScript 和 jQuery 还很陌生...我没有意识到在 document.ready 函数之外使用这些函数会使 JS 将这些事件绑定到由于 DOM 尚未加载,因此基本上不存在元素。
    【解决方案2】:
    function getActive(){
       return $(document.activeElement).is('input') || $(document.activeElement).is('textarea');
    }
    

    【讨论】:

      【解决方案3】:

      对于关于确定当前焦点元素是否是这些用户输入元素中的任何一个的原始问题,以下应该可以工作:

      function isInputElementInFocus() {
          return $(document.activeElement).is(":input");
      }
      

      从概念上讲,我不喜欢这种方法用于一般情况下,您正在侦听全局事件(如键击)并试图决定这些事件是应该由您的全局处理程序处理还是被忽略,因为它是为其他人准备的。我不喜欢它的原因是它对未来不安全,而且谁知道除了输入元素之外还有什么人可以

      另一个更健壮但难以实现的想法是测试事件是否适用于 tabIndex >= 0 的元素。输入元素默认设置 tabIndex === 0,因此它或多或少类似于上述方法.您可以通过event.target.tabIndex >= 0 轻松检查这一点,而无需依赖document.activeElement

      这里的问题(如果你想通用的话)是你还需要确保 event.target 元素既不在 DOM 层次结构的另一个分支中,也不在 event.currentTarget 和 event.target 之间有其他人tabIndex >= 0。你明白了:这可能会变得模糊,但我只是想在其他人需要通用解决方案时记下它。

      【讨论】:

        【解决方案4】:

        你可以这样做:

        var focusItem = null; 
        $('input, textarea').focus( function() { 
            focusItem = this; 
        });
        

        【讨论】:

        • 澄清一下,'focusItem' 将代表 INPUT 或 TEXTAREA DOM 对象?
        • 它代表一个专注于任何类型的人。所以它可以是 INPUT 或 TEXTAREA
        【解决方案5】:

        .blur() 事件是您要找的吗?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-20
          • 2011-09-26
          • 2018-09-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-13
          相关资源
          最近更新 更多