0

从另一个问题汇总

jquery 1.3.2 测试代码,在FF3中运行:

<input type="hidden" value="236434" id="ixd" name='ixd' />

<script>
console.log( $('#ixd').val() );

console.log( $('#ixd') );
console.log( $("input[name='ixd']") );
console.log( $("input:hidden") );

console.log( $("input[name='ixd'][type='hidden']") );
console.log( $("input[name='ixd']").val() );

$(document).ready(function() {
    console.log( $('#ixd').val() );
    console.log( $('#ixd') );
    console.log( $("input[name='ixd']") );
    console.log( $("input:hidden") );
});
</script>

控制台输出:

undefined
[]
[]
[]
[]
undefined
236434
[input#ixd 236434]
[input#ixd 236434]
[input#ixd 236434]

任何人都可以为隐藏字段的数据提供任何解释或文档链接,直到 $(document).ready() 之后才能访问?这不是我曾经经历过的事情,而且证明很麻烦。

4

5 回答 5

4

好吧,我猜你回答了你自己的问题。使用 document.getElementById() 需要浏览器加载 DOM 树,以便 DOM API(包括 getElementById)工作。

这意味着在调用 $(document).ready 函数之前,您无法确定任何 getElementById 调用都能正常工作。查看http://dean.edwards.name/weblog/2005/02/order-of-events/了解更多信息

于 2009-06-15T17:27:58.673 回答
4

与其他人所写的相反,您的示例应该可以工作,因为所有主要浏览器都允许访问执行脚本块之前的元素。我没有安装 Firebug,但是当替换console.log()为 时document.writeln(),您的示例按预期工作。

创建以下 HTML 文档时会发生什么:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<input type="hidden" value="236434" id="ixd">
<pre><script type="text/javascript">
document.writeln($('#ixd').val());
document.writeln(document.getElementById('ixd').value);
</script></pre>
于 2009-06-15T17:37:24.483 回答
1

document.ready 当页面“就绪”时,表示完全渲染。您的隐藏字段目前可能尚未在开始日志中呈现在页面上。

使用 ready() 开始操作页面元素,而不是在那之前,“这是唯一确定的方法”:)

于 2009-06-15T17:28:00.000 回答
1

如果我采用您的代码(并在上面添加 jQuery),我会得到相同的输出。但是,如果我将您的代码更改为以下内容,它将输出正确的结果。我的猜测是,当没有给出 html/head/body 时,firefox 会以不同的顺序解析 HTML。

<html>
<head>
<script type="text/javascript" src="jquery-1.3.2.js"></script>
</head>
<body>
<input type="hidden" value="236434" id="ixd" name='ixd' />

<script>
console.log( $('#ixd').val() );

console.log( $('#ixd') );
console.log( $("input[name='ixd']") );
console.log( $("input:hidden") );

console.log( $("input[name='ixd'][type='hidden']") );
console.log( $("input[name='ixd']").val() );

$(document).ready(function() {
    console.log( $('#ixd').val() );
    console.log( $('#ixd') );
    console.log( $("input[name='ixd']") );
    console.log( $("input:hidden") );
});
</script>

</body>
</html>

但是,如上所述,在尝试按 ID 检索元素之前,请等待文档准备好。

于 2009-06-15T17:37:23.423 回答
0

在 dom 准备好之前,你不应该相信任何东西。这就是事情的运作方式。你有等待准备好的问题吗?

于 2009-06-15T17:27:12.510 回答