Самый быстрый способ проверить флажки, которые имеют значение определенного списка в jQuery - PullRequest
4 голосов
/ 02 апреля 2012

Это мой HTML Dom:

<input type="checkbox" class="chk-act" name="actionChk" value="17">
<input type="checkbox" class="chk-act" name="actionChk" value="18">
<input type="checkbox" class="chk-act" name="actionChk" value="19">
<input type="checkbox" class="chk-act" name="actionChk" value="20">
<input type="checkbox" class="chk-act" name="actionChk" value="21">

И у меня есть скрипт jQuery, который возвращает ответ JSon через ajax:

["18","20","21"]

Список может быть длинным до200 участников.Поэтому мне интересно узнать самый быстрый способ проверки флажков, которые имеют значение в приведенном выше списке, когда возвращается ответ.Каково ваше предложение?

Ответы [ 3 ]

3 голосов
/ 02 апреля 2012

Смешивание jQuery на этом

arr = ["18","20","21"];
$("input:checkbox").prop('checked', false); //If you need to uncheck other boxes too
$.each(arr, function(k,v) {       
   $("input[value=\""+v+"\"]").prop('checked', true);
});

Демо 1 | Демонстрация 2: со всеми другими проверками сняты

2 голосов
/ 02 апреля 2012

Вы можете attr или prop для отмеченных флажков:

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

 arr = ["18","20","21"];

for(var i=0; i<arr.length; i++)
 {
    if(!$("input[value="+arr[i]+"]").is(':checked'))
    { 
        $("input[value="+arr[i]+"]").attr('checked', 'checked');
    }
 }

Демо : http://jsfiddle.net/tU8TP/5/

2 голосов
/ 02 апреля 2012

Самый быстрый способ - добавить идентификатор в ваш список флажков.Например -

<input type="checkbox" class="chk-act" name="actionChk" value="17" id='chk-act-17' />
//incidentally, I hope the lack of a closing '/' was an oversight
//when you get your JSON response, in your ajax success or done methods
var resp = ["12", "232"],
    respLength = resp.length;
for(var i = 0; i < respLength; i += 1){
    $('#chk-act-' + resp[i]).prop('checked', true);
    //if your are using jquery 1.7+ that is, otherwise use, 
    $('#chk-act-' + resp[i]).attr('checked', 'checked');
}

JS Perf Tests

Сравнивая два текущих ответа, требование ОП " fasttest " было бы лучше выполнено, если спуститься вниз по уродливому ' id 'реализация.
Js Perf

Добавлено FIddle

JS FIddle

Отправка кода из скрипки -

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13],
    checkboxes = $('.chk');

checkboxes.each(function(i, item){
    $(this).prop('checked', false);
});

arr.forEach(function(item, i) {
    $('#chk_' + item).prop('checked', true);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...