Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/91.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在不同浏览器中在DOM内部使用activeElement.tagName?_Javascript_Html_Cordova_Dom_Safari - Fatal编程技术网

Javascript 如何在不同浏览器中在DOM内部使用activeElement.tagName?

Javascript 如何在不同浏览器中在DOM内部使用activeElement.tagName?,javascript,html,cordova,dom,safari,Javascript,Html,Cordova,Dom,Safari,在尝试使用phonegap为android和ios应用程序构建UI时,我遇到了难题: 我的函数getFocus()尝试使用 document.activeElement.tagName 但所有浏览器似乎都会得到不同的结果: Chromium(54.0.2840.87(64位))和androids Webkit返回了我所期望的:“按钮” Safari(10.0)、Firefox(49.0.2)和ios Webkit返回:“DIV” 在DOM中,它们看起来都是从不同的起点开始的 如何更精确地从

在尝试使用phonegap为android和ios应用程序构建UI时,我遇到了难题:

我的函数getFocus()尝试使用

document.activeElement.tagName
但所有浏览器似乎都会得到不同的结果:

  • Chromium(54.0.2840.87(64位))和androids Webkit返回了我所期望的:“按钮”
  • Safari(10.0)、Firefox(49.0.2)和ios Webkit返回:“DIV”
在DOM中,它们看起来都是从不同的起点开始的

如何更精确地从safari/ios webkit和chromium/android webkit中获取至少一个按钮

以下是完整的示例代码:

[edit]我编辑了一行,以回应用户the8472的有用评论,并取出了标签周围的标签[/edit]


获取焦点

文本字段1: 文本字段2: 集中注意力

函数getFocus() { 警报(document.activeElement.tagName); };
按钮
内的
a
似乎无论如何都无效。如果你在做非特定的事情,你不应该期望一致的行为

4.5.1
a
元素

内容模型: 透明,但不能有交互式内容或
a
元素子体

交互式内容是专门用于用户交互的内容

a(如果href属性存在)、音频(如果controls属性存在),按钮、详细信息、嵌入、iframe、img(如果usemap属性存在),[…]

我明白了:

正如8472所指出的,我应该检查html规范:

按钮的焦点行为(可以理解)未正确指定: 告诉我,单击按钮时不要将焦点交给按钮。这就解释了所描述的行为

例如,当我将onclick=“javascript:getFocus()”转移到标记并单击输入字段(当然不是按钮)时,我得到了正确的和预期的焦点元素:

<!DOCTYPE html>
<html>

<head>

    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css">

    <script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
    <script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
</head>

<body id="mybody" onclick="javascript:getFocus()">

    <div data-role="page" id="add">
      <div data-role="header" id="myheaderDiv">
        <h1>GetFocus</h1>
      </div>

      <div data-role="main" class="ui-content" id="mydiv">

        <p id="myp">
            textfield1:
            <input type="text" id="title" placeholder="textfield1" />
            textfield2:
            <input type="text" id="message" placeholder="textfield2" />

            <button id="mybutton">get focus</button>
        </p>
      </div>
    </div>



    <script type="text/javascript" src="cordova.js"></script>
    <script src="phonegap.js"></script>
    <script type="text/javascript">

        function getFocus()
        {
         alert(document.activeElement.tagName);
        };

    </script>
</body>

</html>

获取焦点

文本字段1: 文本字段2: 集中注意力

函数getFocus() { 警报(document.activeElement.tagName); };

为了识别不同的元素,我稍后将使用
.activeElement.id

在使用.activeElement.childElementCount时进一步测试浏览器的工作方式:firefox查找1个子元素chrome,android查找0 safari和ios查找2感谢您指出这一点!你完全正确。我将在我的问题中纠正这一点。尽管如此:在我去掉了按钮周围的代码并将代码更正为您的评论之后,这个问题仍然存在。实际上,这让我解决了这个问题。未指定通过单击获取焦点。只有一些浏览器能做到这一点。我在下面进一步描述了它。谢谢!好的教学方法!
<!DOCTYPE html>
<html>

<head>

    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css">

    <script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
    <script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
</head>

<body id="mybody" onclick="javascript:getFocus()">

    <div data-role="page" id="add">
      <div data-role="header" id="myheaderDiv">
        <h1>GetFocus</h1>
      </div>

      <div data-role="main" class="ui-content" id="mydiv">

        <p id="myp">
            textfield1:
            <input type="text" id="title" placeholder="textfield1" />
            textfield2:
            <input type="text" id="message" placeholder="textfield2" />

            <button id="mybutton">get focus</button>
        </p>
      </div>
    </div>



    <script type="text/javascript" src="cordova.js"></script>
    <script src="phonegap.js"></script>
    <script type="text/javascript">

        function getFocus()
        {
         alert(document.activeElement.tagName);
        };

    </script>
</body>

</html>