Javascript 如何在不同浏览器中在DOM内部使用activeElement.tagName?
在尝试使用phonegap为android和ios应用程序构建UI时,我遇到了难题: 我的函数getFocus()尝试使用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中,它们看起来都是从不同的起点开始的 如何更精确地从
document.activeElement.tagName
但所有浏览器似乎都会得到不同的结果:
- Chromium(54.0.2840.87(64位))和androids Webkit返回了我所期望的:“按钮”
- Safari(10.0)、Firefox(49.0.2)和ios Webkit返回:“DIV”
获取焦点
文本字段1:
文本字段2:
集中注意力
函数getFocus()
{
警报(document.activeElement.tagName);
};
按钮内的a
似乎无论如何都无效。如果你在做非特定的事情,你不应该期望一致的行为
4.5.1a
元素
内容模型:
透明,但不能有交互式内容或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>