我试图使用命名空间来搜索DOM但是当我调用时我得到“undefined”而不是jQuery对象
<form id="create_profile">
<input type="text" name="name"/>
<input type="text" name="email" />
<input type="text" name="password" />
<input type="text" name="passwordconfirm" />
<span onclick="profile.create()">valider</span>
</form>
Js:
var profile = {
create: function(){
alert(profileFields.test); // show done!
alert(profileFields.create_form.attr('id')); // show undefined instead of create_profil
}
}
var profileFields = {
test: "done!",
create_form: $("#create_profile"),
$email: $("input[name='name']", this.create_form),
$password: $("input[name='pass']", this.create_form),
$passwordconfirm: $("input[name='passconfirm']", this.create_form),
$name: $("input[name='email']", this.create_form),
$tel: $("input[name='tel']",this.create_form)
}
答案 0 :(得分:1)
这告诉我们您的JavaScript代码在元素存在之前运行,因此$("#create_profile")
返回一个空的jQuery对象。在空jQuery对象上调用attr
会返回undefined
。如果您的script
标记在HTML中高于它引用的元素,那么这些元素将在脚本运行时不存在。
无论
将script
标记放在HTML的最末端,就在结束</body>
标记之前,或
使用jQuery的ready
阻止代码执行,直到“DOM就绪”。
#1是首选,除非您不控制script
标记的位置。更多:
答案 1 :(得分:0)
你可能只是等到DOM准备好了。
将您的代码包装在:
$(function () {
//your code
});