2015-08-05 3 views
0
<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); 
}); 
+3

Вы должны ознакомиться с документацией jQuery: http://api.jquery.com. Многие ваши вопросы могут быть решены за 2 минуты исследований. –

ответ

3

Там несколько вещей, которые здесь не так:

  1. $('.qty:eq('+i+')').prop('selected',true) устанавливает только selected свойство на <select> элемент - не<option> элемент
  2. Вы не выбираете подходящую опцию из массива в соответствии с selectedArr

Я хотел бы сделать что-то вроде этого:

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>

+1

@RoryMcCrossan Спасибо, я всегда забываю, что – CodingIntrigue

3

нужно пространство его является потомком селектор

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

Это позволит выбрать '1' и' 2' соответственно. Я думаю, что OP хочет выбрать опции из массива 'selectedArr' – CodingIntrigue

+0

@RGraham - я просто обозначаю, что такое ошибка OP? –

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); 
}); 
0

Вы можете попробовать это:

selectedArr = [2,3]; 

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

Почему? В чем разница между этим и исходным кодом? – CodingIntrigue

+0

@RGraham, очевидно, 'option' –

+0

Разница заключается в том, что вам не нужно вручную добавлять индекс в строку. Чтобы максимально использовать плагин. –

0

You можете попробовать это:

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); 
    }); 
}); 
1

DEMO

Как вы не имеете значение атрибута в настройках, я думаю, что это то, что ты ищешь.

selectedArr = [2, 3]; 
$.each(selectedArr, function (i, obj) { 
    console.log(obj + '' + i); 
    $('.qty:eq(' + i + ') option:eq(' + obj + ')').prop('selected', true); 
}); 
Смежные вопросы