我有像
这样的代码function populate...() {
var user = $.storage.get("particulars");
if (user) {
console.log($("#frmRegister")); // returns [] why?
$("#frmRegister").find("input[name=name]").val(user.name).end()
.find("input[name=email]").val(user.email).end()
.find("input[name=contact]").val(user.contact).end()
.find("input[name=faculty]").val(user.faculty).end()
.find("input[name=course]").val(user.course).end()
.find("input[name=year]").val(user.year).end();
}
console.log("out")
}
$(function() {
eventsViewModel.populateRegistrationForm();
})
我想知道为什么$("#frmRegister")
在日志中返回null,而在chrome中我使用控制台执行$("#frmRegister")
我得到了表单
Knockout.js是否会干扰这些事情?我的表格如下:
<form action=""
method="POST"
data-bind="submit: $root.submitRegistration, visible: !registered()"
id="frmRegister"
>
更新
有关代码,请参阅http://octopus.phpfogapp.com/。有问题的行是第154行。(除非我更改它。如果是这样,你可能会搜索$("#frmRegister").find("input[name=name]")
或$("#frmRegister
答案 0 :(得分:9)
而不是像这样写你的表格......
<form action="" method="POST" data-bind="submit: $root.submitRegistration, visible: !registered()" id="frmRegister">
...
像这样写:
<form action="/give/a/url.here" method="POST" id="frmRegister">
jQuery有很多问题,比如使用存储和数据绑定作为超级全局,但你的具体问题是:
if (user.name != "") {
$("#frmRegister").find("input[name=name]").val(user.name).end()
.find("input[name=email]").val(user.email).end()
.find("input[name=contact]").val(user.contact).end()
.find("input[name=faculty]").val(user.faculty).end()
.find("input[name=course]").val(user.course).end()
.find("input[name=year]").val(user.year).end();
}
可以写成:
if (user.name != "") {
$("#frmRegister input").val(user.[$(this).prop('name')]).end()
}
答案 1 :(得分:3)
当我加载例如http://octopus.phpfogapp.com/#15并在您指定的位置设置断点时,表单尚未添加到DOM中;一个AJAX请求来自loadUpcoming(来自同一个就绪处理程序),它会在返回时创建表单,但它的响应回调还没有运行。
您需要将调用移动到loadUpcoming的响应回调中或之后运行的内容。
答案 2 :(得分:3)
首先,我首先修复javascript错误。您从存储中获得user
:
var user = $.storage.get("particulars");
但最初没有设置此值,仅在submitRegistration
函数运行时设置。
第152行读取:
if (user.name != "") {
但最初用户的错误未定义。因此,请添加一个额外的检查:
if (user && user.name != "") {
修复此问题,然后查看这是否有助于解决其他问题。
答案 3 :(得分:1)
您正在动态更改DOM的内容,因此,如果您需要jquery来处理动态创建的元素,则需要使用livequery
答案 4 :(得分:1)
问题不是jquery找到你的表格。问题是用户为空。将第150行更改为
if (user == null) {
那应该解决它
答案 5 :(得分:0)
如果您正在使用knockoutjs,为什么不将表单元素数据绑定到视图模型,让knockoutjs像其应该那样完成其余的工作?
如果由于某种原因不可能,你必须等待@jimrandomh状态的DOM,这是一个例子:
// wait for the DOM to be loaded
$(document).ready(function(){
eventsViewModel.populateRegistrationForm();
}