如何获取另一个数组jquery的第一个循环的索引

时间:2012-10-23 13:18:04

标签: jquery

我正在尝试访问foreach循环的索引以访问第二个元素

$.each("input:checkbox[name=city[]]:checked", function (index, item) {
    var category = $('select[name="category[]["' + index + '"]"]').val();
    alert(category);
    var split = category = category.split('_');
    var category = split[0];
    if (category == "0") {
        alert('Please select hotel category');
        validate = "false";
        return false;
    }
    else {
        validate = "true";
    }
});

这是我的HTML

<select name="category[]" 
         id="webmenus_<?php echo $BPackageCityRelatedToCountry[$i]['city_id']; ?>"      
         onchange="showValue(this.value)"
 >
     <option value="0" selected="selected" title="Please select hotel category"></option>
     <option value="5_<?php echo $BPackageCityRelatedToCountry[$i]['city_id']; ?>" title="/public/front_end/images/5star.png"></option>
     <option value="4_<?php echo $BPackageCityRelatedToCountry[$i]['city_id']; ?>" title="/public/front_end/images/4star.png"></option>
     <option value="3_<?php echo $BPackageCityRelatedToCountry[$i]['city_id']; ?>" title="/public/front_end/images/3star.png"></option>
     <option value="2_<?php echo $BPackageCityRelatedToCountry[$i]['city_id']; ?>" title="/public/front_end/images/2star.png"></option>
     <option value="1_<?php echo $BPackageCityRelatedToCountry[$i]['city_id']; ?>" title="/public/front_end/images/1star.png"></option>
</select>

但我得到的不确定。

谢谢,

3 个答案:

答案 0 :(得分:0)

我怀疑问题不是未定义的索引,而是选择器中的冗余双引号,请尝试删除它们:

var category = $('select[name="category[][' + index + ']"]').val();

使用原始语法,选择器看起来像select[name="category[]["0"]"],由于未转义的嵌套双引号而无效。

答案 1 :(得分:0)

如果您有多个city[]个复选框,每个复选框都有相应的category[]选项,那么您的代码将为您提供所需内容... index in $.each指的是元素相对于选择器的索引,而不是相对于页面的索引。 (如果我在这个假设中错了,请澄清你的问题,例如发布你的html代码)

选择相关字段的更好方法是找到一个共同的父级,然后在其中搜索特定的类。例如,如果您的标记如下:

<ul>
    <li>
        <input type="checkbox" name="city[]" />
        ...
        <select name="category[]">...</select>
    </li>
    <li> ... </li>
    ...
</ul>

您可以使用例如:

查询右select
$.each("input:checkbox[name=city[]]:checked", function (index, item) {
    var category = $(this).closest("li").find('select[name="category[]"]').val();
    ...

答案 2 :(得分:0)

我通过对城市和类别使用foreach循环解决了这个问题。

 $("input:checkbox[name='city[]']:checked").each(function(j){
                var city=$(this);
                $('select[name="category[]"]').each(function(i){
                    if(i==j){
                        if($(this).val()=="0"){
                            alert("Please select hotel category");
                            city.click();
                            city.attr('checked', true);
                            validate="false";
                            return false;
                        }
                        else
                        {
                            validate="true";
                        }
                    }
                }); 
                if(validate=="false"){
                    return false;
                }
            });

谢谢大家,