2010-04-26 4 views

ответ

3

Попросту JavaScript:

function in_array(needle, haystack, argStrict) 
{ 
    var key = '', strict = !!argStrict; 
    if (strict) 
    { 
     for (key in haystack) 
     { 
      if (haystack[key] === needle) 
       return true; 
     } 
    } 
    else 
    { 
     for (key in haystack) 
     { 
      if (haystack[key] == needle) 
       return true; 
     } 
    } 
    return false; 
} 

var values = new Array(1, 2, 4); 
var select = document.getElementById('selectName'); //Change to the id of the select 
if (select) 
{ 
    for (var i = 0; i < select.options.length; i++) 
    { 
     //Select options matching array values, unselect others 
     select.options[i].selected = in_array(select.options[i].value, values, false); 
    } 
} 

UPDATE: Добавлен JavaScript функция in_array, которые имитируют PHP один ...

+0

для каждого значения в массиве вы будете перебрать всю коллекцию элементов в избранных? ты не переусердствовал? –

+0

Да, это немного перебор, но так как многие элементы в select могут иметь одинаковое значение ... Это маловероятно, но это возможно :) Во всяком случае, с этим фрагментом, я думаю, вы поняли, как это сделать. – AlexV

+0

Я не думаю, что разработчик должен разрешить выбор с тем же значением, что и другой, что было бы адеком поддержки. –

0

Я не очень хорошо знакомы с Javascript, но я думаю, что это:

var values = [1, 2, 4]; 
var sel = document.getElementsByTagName('SELECT')[0]; 
for (var i = 0; i < sel.options.length; i++) { 
    if(sel.options[i].value == 1 || sel.options[i].value == 2 || sel.options[i].value == 4) 
     sel.options[i].selected = 'selected'; 
} 
1

Поскольку у меня еще нет 50 пунктов репутации, я не могу комментировать или исправлять сообщение выше

Так вот мой фикс к предыдущему массиву

var values = new Array(1, 2, 4); // using commas 
var values = [1, 2, 4]; // using array notation 
+0

- ах, он исправил это сам ... – mplungjan

+1

Однако Хармен ошибается. Вы не можете выбрать опцию в своем индексе, используя ее значение, как вы опубликовали – mplungjan

6

JQuery имеет утилиту под названием $.inArray(value,array). Вы могли бы сделать что-то вроде этого:

var array = [1,2,4]; 

$('#example option').each(function() { 
    var $th = $(this); 
    var value = parseInt($th.val()); 
    if($.inArray(value,array) >= 0) { 
     $th.attr('selected','selected'); 
    } 
}); 

$.inArray() возвращает индекс значения, если она найдена, или -1, если он не находится в массиве. Вот почему вам нужно протестировать >= 0.

Просмотреть пример здесь-

http://jsfiddle.net/PJs37/

Смежные вопросы