получение имен элементов в JS / jQuery - PullRequest
0 голосов
/ 18 мая 2010

У меня есть несколько входов для флажков, например:

<input type="checkbox" name="1" class="filter"/>
<input type="checkbox" name="2" class="filter"/>
...etc...

Я пытаюсь написать функцию, в которой каждый раз, когда установлен флажок, генерируется строка со всеми объединенными именами Вот что у меня есть:

$('.filter').click(function(event){
    var filters = $('.filter').toArray();
    var fstr = "";
    for (f in filters)
    {
        fstr = fstr+","+f.name;
    }
    alert(fstr);
});

Имена продолжают появляться как «неопределенные», хотя (то есть предупреждение возвращает ,undefined,undefined,undefined,undefined,undefined,undefined). Как мне получить доступ к именам?

Ответы [ 7 ]

4 голосов
/ 18 мая 2010

Вот как это должно быть сделано:

$('.filter').click(function (event)
{
    var fstr = '';
    $('.filter[name]').each(function ()
    {
        fstr += ',' + $(this).attr('name');
    });
    alert(fstr);
});
1 голос
/ 18 мая 2010
(function($filters) {
    $filters.click(function(event) {
        var filters = $filters.toArray();
        var fstr = [];
        for (var i = filters.length - 1; i > -1; --i) {
            fstr.push(filters[i].name);
        }
        fstr = fstr.join(",");
        alert(fstr);
    }
})($('.filter'));
1 голос
/ 18 мая 2010
$('.filter').click(function(event){
    var filters = $('.filter').toArray();
    var fstr = "";
    for (f in filters)
    {
        fstr = fstr+","+filters[f].name;
    }
    alert(fstr);
});

Почему ты так делаешь?

$('.filter').click(function(event){
    var str = '';

    $('.filter').each(function () {
       str += $(this).attr('name') +",";
    });

    alert(str);
});
1 голос
/ 18 мая 2010

Вы можете использовать .map(), чтобы получить то, что вы ищете, например:

$('.filter').click(function(event){
  var names = $('.filter').map(function () { 
    return $(this).attr("name"); 
  }).get().join(',');
  alert(names);
});

Просто измените $('.filter') на $('.filter:checked'), если вы хотите список, содержащий только отмеченные.

0 голосов
/ 18 мая 2010

Я думаю, что преобразование в массив - ваша проблема, попробуйте:

var filters = $('.filter');
for(var nI = 0; nI < filters.length; nI++)
filters.eq(nI).attr('name');
0 голосов
/ 18 мая 2010

Как насчет $(elem).attr("name")?

0 голосов
/ 18 мая 2010

Попробуйте $(f).name.

...