在帮助某人时,我遇到了一个有趣的情况。他们想知道为什么下面的代码有效:
<input type="text" id="myElem" value="Nice" />
$(function() {
var myElem = $("myElem");
myProblem();
});
var myProblem = function() {
var result = myElem.value; //This Works
result = myElem.val(); //Doesn't Work
}
起初我没有一个好的答案,因为我目前的想法是myProblem方法中的两个语句都应该失败,但只有一个失败。后来我学会了全局浏览器范围内的所有HTML元素。
因此解释如何解决这个问题是因为myElem将作为on load函数中的JQuery对象在范围内,但是当它在myProblem方法中时,JQuery对象将变得超出范围,并且因为浏览器范围全部全局HTML元素,myElem的范围将为HtmlInputElement。
我已经编写了一段时间的代码了,对我来说,只是学习浏览器在全球范围内查找所有HTML元素对我来说都是新闻。
我理解代码示例及其工作原理。我的问题是浏览器有多早就这样做了?这是最新趋势还是我错过了什么?所有浏览器都支持这个吗?
经过一番研究,我发现最新的浏览器支持,但IE6 +等等。
谢谢
答案 0 :(得分:2)
“我理解代码示例及其工作原理。我的问题是浏览器是如何做到这一点的?这是最新趋势还是我错过了什么?所有浏览器都支持这个吗?”
这最初是一个非标准的IE功能。如果我记得的话,Opera可能首先采用它,然后是Chrome浏览器。
最近,Firefox采用了它。因此,喜欢或讨厌它,大多数现代浏览器都实现了这一功能,但如果您支持旧版浏览器,您会发现一些(特别是Firefox)没有它。
许多人建议不要依赖此功能。最终由您和您的项目必须支持的浏览器决定。
答案 1 :(得分:0)
这是因为在myProblem
内你正在访问一个名为myElem
的全局变量,它被浏览器暴露给全局范围......它是名为/ {{1}的dom元素所以它没有与myElem
相关联的jQuery包装器方法
规范可以是found here
.val()