我的页面上有一组控件,我试图迭代并确定它们是否有值。这些控件中的一些是< select>在这个例子中,我需要遍历与< select>相关联的选项。控制并找到所选的。我尝试过.children()以及.find("选项:选择")并且它们都不起作用(两者都在javascript中抛出"未定义"错误)。我做错了什么?
function getJsonValue(control, json) {
if(control.dataset["fieldname"] !== "undefined"){
if(control.tagName == "SELECT") {
var selected = "{";
var idName = control.dataset["idname"];
control.children.each( function() {
if(this.selected) {
selected += idName + ": " + this.val() + ",";
}
});
selected += "}";
if(selected != '') {
json += control.dataset["fieldname"] + ": ";
json += selected + ",";
}
} else {
if(control.val() != '') {
json += control.dataset["fieldname"] + ": ";
json += control.val() + ",";
}
}
}
};
错误出现在上面代码的第5行(control.children.each)。我试过了:
control.children.each( function() {
control.childre().each( function() {
control.find("option:selected").each( function() {
这些选项都不起作用。作为参考,"控制"变量从另一个通过执行以下操作找到的函数传递:
$("#search-header").find("select").each( function() {
json = getJsonValue(this, json);
});
答案 0 :(得分:1)
为了进一步扩展我的评论,我可以看到您传递了对象this
,该对象已分配给函数中的变量control
。但是,jQuery不能直接对这个对象进行操作,除非它被转换为jQuery对象,这可以通过使用jQuery别名$(control)
包装它来完成(提示,就像人们使用$(this)
的方式一样在jQuery中,它是一样的。)
因此,如果您以这种方式修改代码,它应该可以工作:
function getJsonValue(control, json) {
if(control.dataset["fieldname"] !== "undefined"){
if(control.tagName == "SELECT") {
var selected = "{";
var idName = control.dataset["idname"];
$(control).children.each( function() {
if(this.selected) {
selected += idName + ": " + this.val() + ",";
}
});
selected += "}";
if(selected != '') {
json += control.dataset["fieldname"] + ": ";
json += selected + ",";
}
} else {
if(control.val() != '') {
json += control.dataset["fieldname"] + ": ";
json += $(control).val() + ",";
}
}
}
};
p / s:另外,如果您想从jQuery对象访问原始DOM节点,只需使用$(control)[0]
;)
答案 1 :(得分:1)
尝试
$(control).find("option:selected").each( function() {
或
$(control).children.each( function() {
您正在向调用者传递(this)函数。它没有jquery选择器。
答案 2 :(得分:0)
您缺少第一个孩子的开放式近距离
control.children().each( function() {
control.childre().each( function() {
control.find("option:selected").each( function() {