eq(0)不是$ .each的有效选择器

时间:2015-08-05 10:22:48

标签: javascript jquery

<select class="qty">
    <option>1</option>
    <option>2</option>
    <option>3</option>
    <option>4</option>
</select>
<select class="qty">
    <option>1</option>
    <option>2</option>
    <option>3</option>
    <option>4</option>
</select>

我有2个select标签,我想用数组更新它们。这意味着将所选内容更改为正确的值,但为什么我在下面的尝试中:eq()无法使用我的循环?

selectedArr = [2,3];

$.each(selectedArr,function(i,obj){
    console.log(obj);
    $('.qty:eq(' + i + ')').prop('selected', true);
});

6 个答案:

答案 0 :(得分:3)

需要空间它是后代选择器

$('.qty option:eq('+i+')').prop('selected',true);

答案 1 :(得分:3)

因为您尝试修改selected元素的select属性。您应该选择目标option子项,然后修改selected属性。 HTMLSelectElement对象没有selected属性。

以下代码段首先根据当前迭代的索引选择目标选择元素,然后选择目标选项元素:

$.each(selectedArr, function (i, obj) {
    $('.qty:eq(' + i + ') option:eq('+ obj +')').prop('selected', true);
});

另一种选择是使用val方法:

$.each(selectedArr, function (i, obj) {
    $('.qty:eq(' + i + ')').val(obj);
});

答案 2 :(得分:3)

这里有一些问题:

  1. $('.qty:eq('+i+')').prop('selected',true)仅在selected元素上设置<select>属性 - <option>元素
  2. 您没有根据selectedArr
  3. 从数组中选择适当的选项

    我会做这样的事情:

    var selectedArr = [2, 3];
    
    $.each(selectedArr, function(i, obj) {
      $('.qty:eq(' + i + ')').val(obj);
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <select class="qty">
      <option>1</option>
      <option>2</option>
      <option>3</option>
      <option>4</option>
    </select>
    
    
    <select class="qty">
      <option>1</option>
      <option>2</option>
      <option>3</option>
      <option>4</option>
    </select>

答案 3 :(得分:1)

<强> DEMO

由于您没有选项中的值属性,我认为这正是您所寻找的。

selectedArr = [2, 3];
$.each(selectedArr, function (i, obj) {
    console.log(obj + '' + i );
    $('.qty:eq(' + i + ') option:eq(' + obj + ')').prop('selected', true);
});

答案 4 :(得分:0)

您可能想尝试一下:

selectedArr = [2,3];

$.each(selectedArr,function(i,obj){
    console.log(obj);
    $('.qty option').eq(i).prop('selected',true);
});

答案 5 :(得分:0)

你可以试试这个:

https://jsfiddle.net/4wfeqd2z/

selectedArr = [2,3];

$.each(selectedArr,function(i,obj){
    console.log(obj);
    $('.qty').each(function() {
        $(this).find('option:eq('+obj+')').prop('selected',true);
    });
});