2010-05-18 58 views
0

我有一些複選框,輸入如下所示:獲得元素的名稱在JS/jQuery的

<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)。我如何訪問名稱?

回答

4

這就是它的意思做:

$('.filter').click(function (event) 
{ 
    var fstr = ''; 
    $('.filter[name]').each(function() 
    { 
     fstr += ',' + $(this).attr('name'); 
    }); 
    alert(fstr); 
}); 
+0

謝謝!我試圖找出正確的jQuery語法,還有什麼更實際的工作:) – Mala 2010-05-18 17:49:45

+0

沒有'.name()'方法,你必須得到像任何其他屬性名稱,使用'.attr()' 。您可能已經見過使用'.val()',但這是一個特殊的函數,主要用於獲取表單元素的邏輯值。 – 2010-05-18 17:55:28

0

嘗試$(f).name

+0

仍然不確定 – Mala 2010-05-18 17:45:55

0

$(elem).attr("name")怎麼樣?

+0

也仍然不確定... – Mala 2010-05-18 17:46:26

+0

通過'elem'我的意思是任何元素。所以在這種情況下,你會使用'$(f)'... - 仍然未定義? – Jeriko 2010-05-18 17:49:04

+0

他使用'for in','f'只是屬性的關鍵,而不是價值。 – Matt 2010-05-18 17:52:43

1

您可以使用.map()讓你以後,就像這樣:

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

只要改變$('.filter')$('.filter:checked')如果你想列表只包含選中的列表。

0

我想轉換到數組是你的問題,請嘗試:

var filters = $('.filter'); 
for(var nI = 0; nI < filters.length; nI++) 
filters.eq(nI).attr('name'); 
1
$('.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
(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'));