Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在jQuery中使用.children和.find_Javascript_Jquery_Children - Fatal编程技术网

Javascript 在jQuery中使用.children和.find

Javascript 在jQuery中使用.children和.find,javascript,jquery,children,Javascript,Jquery,Children,我在我的页面上有一组控件,我正在尝试遍历这些控件并确定它们是否有值。其中一些控件是项,在本例中,我需要循环遍历与该控件关联的选项,并找到所选的选项。我尝试过.children()和.find(“option:selected”),但两者都不起作用(都会在javascript中抛出一个“未定义”的错误)。我做错了什么 function getJsonValue(control, json) { if(control.dataset["fieldname"] !== "undefined"

我在我的页面上有一组控件,我正在尝试遍历这些控件并确定它们是否有值。其中一些控件是项,在本例中,我需要循环遍历与该控件关联的选项,并找到所选的选项。我尝试过.children()和.find(“option:selected”),但两者都不起作用(都会在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() {
这些选项都不起作用。作为参考,“control”变量从另一个函数传递,该函数通过执行以下操作找到:

$("#search-header").find("select").each( function() {
    json = getJsonValue(this, json);
});

您缺少第一个孩子的开闭括号

control.children().each( function() {
control.childre().each( function() {
control.find("option:selected").each( function() {

为了进一步扩展我的评论,我可以看到您正在传递对象
this
,该对象被分配给函数中的变量
control
。但是,除非将jQuery转换为jQuery对象,否则jQuery无法直接对该对象进行操作,只需将其包装为jQuery别名
$(control)
(提示,就像人们在jQuery中使用
$(this)
一样)

因此,如果以这种方式修改代码,它应该可以工作:

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() + ",";
            }
        }
    }
};
附言:如果您想从jQuery对象访问原始DOM节点,只需使用
$(control)[0]
;)

试试看

$(control).find("option:selected").each( function() {


您正在将(此)函数从调用方传递给您。它没有jquery选择器。

控件
不是jquery对象,这就是为什么jquery方法不适用于它。改为使用
$(控件)
。尝试手动创建json是个坏主意,它很容易出错。此代码的预期结果是什么?通过创建真正的对象和使用
JSON.stringify()
我认为您不需要对
each()进行任何循环。您可以使用
$(控件)。查找(':selected')
,或者如果您将
idName
绑定到每个选项值,那么您可以只使用
$(控件)。val()
。如果
多个
,也将失败,因为您的代码将多次创建同一属性,并且还会有一个额外的尾随逗号。。。这是容易出错问题的一部分
$(control).children.each( function() {