Как я могу установить флажок, если у меня есть массив значений?

У меня есть следующие входы!

<input type="checkbox" value="1" />
<input type="checkbox" value="2" />
<input type="checkbox" value="3" />
<input type="checkbox" value="4" />
<input type="checkbox" value="5" />

После использования jQuery я хочу, чтобы мой результат выглядел так:

<input type="checkbox" value="1" checked />
<input type="checkbox" value="2" />
<input type="checkbox" value="3" checked  />
<input type="checkbox" value="4" />
<input type="checkbox" value="5" checked />

Я использую следующий код, но он не работает.

$(document).ready(function() { 
    var str = '1,3,5';
    var temp = new Array();
    temp = str.split(",");
    for (a in temp ) {
        //$('.check').valueOf().checked;
        $('.check').val(append(temp[a])).checked;
        //$('#c').append();
    }
});

Заранее спасибо!


person dido    schedule 23.01.2012    source источник


Ответы (4)


Описание

Вы можете просмотреть свой массив, используя for(i=0;i!=temp.length;i++), и использовать селектор атрибутов, чтобы установить правильный флажок.

Посмотрите мой пример и эту демонстрацию jsFiddle.

Образец

$(document).ready(function() { 
    var str = '1,3,5';
    var temp = new Array();
    temp = str.split(",");
    for (i=0; i!=temp.length;i++) {
        var checkbox = $("input[type='checkbox'][value='"+temp[i]+"']");
        checkbox.attr("checked","checked");
    }
});

Дополнительная информация

person dknaack    schedule 23.01.2012
comment
comment
+1 к этому, у меня было почти идентичное решение, написанное в моем jsfiddle. Будь ты проклят, время! - person Anders Arpi; 23.01.2012

Я должен спросить, как именно вы ожидаете, что это сработает? Для начала вы вызываете элементы с именем класса check, которого нет ни у одного из ваших элементов, затем у вас просто есть оператор без какого-либо присваивания или чего-то еще... Вы также создаете массив, который просто выбрасывается, потому что split создает новый массив. Кроме того, вместо разбиения строки просто что-то вроде var temp = [1,3,5]; будет работать нормально... И, наконец, вы используете for...in в массиве, что плохо, потому что массивы имеют свойства рядом с их ключами (например, length и несколько методов)...

В любом случае, вам нужно что-то вроде:

(function() {
    var elms = document.querySelectorAll('input[type=checkbox]'), l = qsa.length, i;
    for( i=0; i<l; i++) {
        elms[i].checked = (elms[i].value % 2 == 1);
    }
})();
person Niet the Dark Absol    schedule 23.01.2012
comment
Это зависит от того, что он всегда хочет, чтобы проверялись только нечетные числа, не так ли? Выглядит как-то рискованно. - person Anders Arpi; 23.01.2012

Попробуй это:

$(document).ready(function(){
    $("input[type='checkbox']").each(function(){
        if( $(this).index() % 2 == 0 ){
            $(this).attr('checked','checked');
        }
     });
});

Вы можете поиграть со скрипкой здесь - http://jsfiddle.net/EuXQF/

person Sagar Patil    schedule 23.01.2012

person    schedule
comment
Лучшее решение! надеюсь, это поможет вам.! - person Ouch Bros; 07.12.2016
comment
ваш пост немного странный, спасибо, если вам нужна помощь. Но похоже на спам. Вопрос был открыт 4 года назад. Хороший ответ уже был. И вам не нужно комментировать свой ответ таким образом. Я призываю вас ответить на горячий вопрос без принятого ответа. Когда вы привыкнете к переполнению стека, не стесняйтесь отвечать на любой вопрос, который, по вашему мнению, необходим. - person Stargateur; 07.12.2016