Разделить массив строк, чтобы найти и установить флажки - PullRequest
3 голосов
/ 15 июня 2011

У меня есть строка, разделенная запятыми.Я использую команду javascript split, чтобы разбить ее на массив.

У меня есть группа флажков ciContact.

<table border="0" cellspacing="0" cellpadding="6">
    <tr>
        <td><label>
            <input type="checkbox" name="ciContact[]" value="Call" id="ciContact_0" />
      Call</label></td>
    <td><label>
            <input type="checkbox" name="ciContact[]" value="Email" id="ciContact_1" />
      Email</label></td>

        <td><label>
            <input type="checkbox" name="ciContact[]" value="Text" id="ciContact_2" />
      Text</label></td>
    </tr>
</table>

Массив содержит только значения, которые необходимо проверить.Эти значения возвращаются из вызова AJAX, который закодирован в JSON.Однако все эти значения (ciContact) хранятся в базе данных MySQL в виде массива с разделителями-запятыми.Есть причина, по которой я это сделал.Итак, как мне прочитать значения моего массива, разделенного запятыми, и установить соответствующие флажки?

Я пробовал:

var ciContact = data.split(", ");
for (var j = 0; j < ciContact.length; j++)
    {
var selected = $('name=ciContact').find('value='+ ciContact[i]);
selected.attr("checked","checked");
}

Я уже не в этом.Ха!

Спасибо, ребята!

Ответы [ 4 ]

5 голосов
/ 15 июня 2011
var ciContact = data.split(", ");
for (var j = 0; j < ciContact.length; j++) {
    $('input[name^=ciContact][value=' + ciContact[j] + ']').attr('checked','checked');`
}

Или, для чуть лучшей производительности:

var ciContact = data.split(", "),
    $inputs = $('input[name^=ciContact]');
for (var j = 0; j < ciContact.length; j++) {
    $inputs.filter('[value=' + ciContact[j] + ']').attr('checked','checked');`
}

Или, фантазии:

var ciContact = data.split(", ").join('], [value='),
    $inputs = $('input[name^=ciContact]');

$inputs.filter('[value=' + ciContact + ']').attr('checked','checked');
2 голосов
/ 15 июня 2011

Есть несколько вещей не так. Ваш селектор неверен, и вы используете неверную переменную цикла (i вместо j).

Это должно сделать это:

var ciContact = data.split(", "),
    $elements = $('input[name="ciContact[]"]');

for (var j = 0; j < ciContact.length; j++) {
    $elements.filter('[value="' + ciContact[j] + '"]').attr("checked","checked");
}
0 голосов
/ 15 июня 2011
var ciContact = data.split(", ");
var tmpHash = {};
for(var i = 0; i < ciContact.length; i++){
    tmpHash[$.trim(ciContact[i])] = 1; // if you are pretty sure that your data is clean, skip $.trim()
}

$('input[name="ciContact[]"]').each(function(){
    if($(this).val() in tmpHash){
        $(this).attr('checked', 'true');
    }
}

или существует новая библиотека javascript под названием tog, вы можете использовать ее для обработки ajax.

function checkBox(data, all_options){
    var ciContact = data.split(", ");
    var tmpHash = {};
    for(var i = 0; i < ciContact.length; i++){
        tmpHash[$.trim(ciContact[i])] = 1; // if you are pretty sure that your data is clean, skip $.trim()
    }

    return Tog().map(all_options, function(opt, key, _num){
        var t = tog.Td().Tog('label').checkbox('$ciContact[]')
            .id('ciContact_', _num);
        if(opt in tmpHash){ t.checked() }

        // close the check box, and append the value as its label
        t.close().cont(opt);
        return t;
    }).html();
}

Вызов checkBox (данные, опции) даст вам кусок html. и вы можете добавить его к чему-то вроде $ ('таблица tr') На вашем бэкэнде вам просто нужно выгрузить все ваши опции в строку json. И ваша клиентская сторона может легко получить это, так называемые «all_options»

0 голосов
/ 15 июня 2011
var ciContact = data.split(", ");
var checkboxes = $('input:checkbox[name="ciContact[]"]');

for (var j = 0; j < ciContact.length; j++){
    checkboxes
        .filter('[value="'+ciContact[j]+'"]')
        .attr("checked","checked");
}

Вы можете увидеть его в действии здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...