1

我正在尝试访问 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>

但我越来越不确定。

谢谢,

4

3 回答 3

0

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

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

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

于 2012-10-23T13:22:58.537 回答
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;
                }
            });

谢谢大家,

于 2012-10-24T11:45:19.817 回答
0

如果您有许多city[]复选框,每个复选框都有一个相应的category[]选择,那么您的代码不会 给您想要的... indexin$.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();
    ...
于 2012-10-23T13:32:17.227 回答