我有一个div,我是动态创建的,具有唯一的ID。我将()附加到页面上的某个区域。
稍后,我尝试通过$('#id_here')引用它,但它什么也没有返回。 safari / chrome中的Inspector显示元素的存在和正确的id。
<script>
$( '#box' ).append( '<div><input id="id123" /></div>' );
//Later on in time...
function doingStuff(){
alert( $( '#id123' ) );//undefined
}
</script>
<div id="box">
</div>
答案 0 :(得分:3)
确保在DOM准备好之前附加对象,否则您可能无法访问#box。
$( document ).ready( function()
{
$( '#box' ).append( '<div><input id="id123" /></div>' );
} );
答案 1 :(得分:1)
你做得对,这只是你的警告声明可能有点偏。目前,您将jquery结果传递给alert(),它只报告“[object Objerct]”(无论如何都在Chrome中。每个浏览器都会有所不同。)
尝试:
alert($("#id123").val());
这会警告文本框中的值。
或
alert($("#id123")[0].id);
这会警告输入的id(id123)。
也许您的代码中的其他地方有错误?你发布的内容很好。
<强>更新强>
正如其他人指出的(我错过了),你的脚本在div附加到文档之前运行,因此是“未定义的”。通过将所有内容包装在:
中来防止脚本运行$(document).ready(function()
{
// Script here
});
是要走的路。
答案 2 :(得分:0)
告诉jQuery在追加div之前等待document to be ready。这样,文档(和#box
)被加载并准备好在jQuery开始工作之前使用。你这样做:
$(document).ready(function() {
$( '#box' ).append( '<div><input id="id123" /></div>' );
});
您可以保留其余代码
答案 3 :(得分:0)
我以前用来解决这类问题的最好方法是使用来自Jquery的.live(),它将一个处理程序附加到所需的事件上,以便在以后创建的现有元素或元素上使用(如.append())...
<强>例:强>
$('#box').append('<div><input id="id123" /></div>');
$('#id123').live('click', function() {
// Your Desired Code for that ID
});
了解详情
答案 4 :(得分:0)
关于我的黑客攻击和未经测试的例子的评论都很公平。
原来我的问题是我的div id中的一个特殊字符。
这是漫长的一天。