(aggregated from another question)
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()之后才能访问这些数据吗?这不是我经历的事情,而且证明是麻烦的。
答案 0 :(得分:4)
嗯,我想你回答了自己的问题。使用document.getElementById()需要浏览器加载DOM树,以便DOM API(包括getElementById)能够工作。
这意味着在调用$(document).ready函数之前,您无法确定任何getElementById调用是否正常工作。查看http://dean.edwards.name/weblog/2005/02/order-of-events/了解更多
答案 1 :(得分: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>
答案 2 :(得分:1)
document.ready,意思是完全呈现。 您的隐藏字段可能尚未在开始日志中的页面上呈现。
使用ready()开始使用页面元素进行操作,而不是在此之前,“这是确保”的唯一方法:)
答案 3 :(得分: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检索元素之前,请等待文档准备就绪。
答案 4 :(得分:0)
在dom准备好之前你不应该相信任何事情。这只是事情的运作方式。等到准备好了你有问题吗?