Javascript 构造对象数组

Javascript 构造对象数组,javascript,jquery,Javascript,Jquery,我需要提交包含以下对象的集合(集合、列表、数组): id、电话号码、电话类型 我有很多div,下面是一些示例HTML: <div id="f9" class="facilityBox"> <div style="float:left;"> <label>BRANCH</label> </div> <div style="float:right;"> <a href="#" onc

我需要提交包含以下对象的集合(集合、列表、数组):

id、电话号码、电话类型

我有很多div,下面是一些示例HTML:

<div id="f9" class="facilityBox">
    <div style="float:left;">
        <label>BRANCH</label>
    </div>
    <div style="float:right;"> <a href="#" onclick="return Location.submitUpdateFacility(9)'">Save changes</a> 
    </div>
    <div class="phoneSet">
        <input type="text" value="787-788-1111" class="phones" name="number" />
        <select class="phoneType" name="type">
            <option selected="selected" value="PHONE">Phone</option>
            <option value="FAX">Fax</option>
        </select>
        <input type="hidden" value="6" class="phoneId" name="id" />
    </div>
    <div class="phoneSet">
        <input type="text" value="787-795-4095" class="phones" name="number" />
        <select class="phoneType" name="type">
            <option value="PHONE">Phone</option>
            <option selected="selected" value="FAX">Fax</option>
        </select>
        <input type="hidden" value="106" class="phoneId" name="id" />
    </div>
</div>

我的问题是在Firebug/Chrome控制台调试时,它不会进入循环,因此不会创建任何数组。我做错了什么?

问题似乎是您将“9”作为函数参数传入,然后将其转换为jquery选择器作为
“#”+id+”.phoneSet“
。这将生成不正确的
“#9.phoneSet”

您应该使用
“#f”+id+”.phoneSet“


还应注意的是,您使用的其他选择器(例如“.phoneId input[name=id]”)也可能需要进行更正,然后才能完全按照您的预期工作。

问题似乎是您将“9”作为函数参数传入,然后将其转换为jquery选择器作为
“#”+id+”.phoneSet“
。这将生成不正确的
“#9.phoneSet”

您应该使用
“#f”+id+”.phoneSet“


还应注意,您使用的其他选择器(例如“.phoneId input[name=id]”)也可能需要更正,然后才能完全按照您的预期工作。

您是否尝试过
。每个(函数(索引,元素){})?不要使用以数字开头的id。考虑到它应该在
#f9.phoneSet
上迭代,它应该是id为f9的div下具有类phoneSet的每个div,我不相信这会有任何区别。此外,我在任何地方都不需要索引,所以是的。不过,我不太确定元素的作用。现在我对事情有点清楚了。:)@MelanciaUK:所以,在HTML5中,你现在可以拥有以数字开头的ID。从兼容性的角度来看,这仍然是个坏主意,但这是允许的。您是否尝试过
.each(函数(索引,元素){})?不要使用以数字开头的id。考虑到它应该在
#f9.phoneSet
上迭代,它应该是id为f9的div下具有类phoneSet的每个div,我不相信这会有任何区别。此外,我在任何地方都不需要索引,所以是的。不过,我不太确定元素的作用。现在我对事情有点清楚了。:)@MelanciaUK:所以,在HTML5中,你现在可以拥有以数字开头的ID。从兼容性的角度来看,这仍然是个坏主意,但这是允许的。看来我确实错过了这一点。。。天哪,想想我至少已经做了两个小时了。@Nimchip:这就是我所说的“代码盲症”。您查看代码的时间已经够长了,您知道f在那里,所以您没有仔细查看代码以确保它确实在那里。:)看来我真的错过了那个。。。天哪,想想我至少已经做了两个小时了。@Nimchip:这就是我所说的“代码盲症”。您查看代码的时间已经够长了,您知道f在那里,所以您没有仔细查看代码以确保它确实在那里。:)
Location.submitUpdateFacility = function (facilityId) {
    $("#updateFacility input[name=index]").val(facilityId);
    var id = facilityId;
    var phones;
    $("#" + id + " .phoneSet").each(function () {
        phones += {
            id: $(".phoneId input[name=id]").val(),
            phoneNumber: $(".phones input[name=number]").val(),
            phoneType: $(".phoneType select[name=type]").selected().val()
        };
    });    
};