2013-07-29 266 views
1

我有兩個數組。 第一個數組(idContainerArray)包含我在頁面中選擇的複選框的ID。第二個數組(idArray)將包含當前頁面複選框的ID。比較兩個數組的匹配值

我想比較這兩個數組,如果找到匹配,請檢查當前頁面上的相應複選框。

下面的代碼執行沒有錯誤,但不會檢查框。

的jquery:

var idArray = []; 
     var idContainerArray = []; 

     $.each(idArray, function (i, el) { 
      if ($.inArray(el, idContainerArray) != -1) { 
        $(el).prop("checked", true); 
      } 
     }); 

回答

0

checked屬性值必須是checked。而作爲McGarnagle指出,選擇一個id爲#

var idArray = []; 
    var idContainerArray = []; 

    $.each(idArray, function (i, el) { 
     if ($.inArray(el, idContainerArray) != -1) { 
       $('#' + el).attr("checked", "checked"); 
     } 
    }); 
+0

爲什麼'attr'而不是'prop'? – Sergio

+0

attr與html屬性一起工作,道具與DOM屬性一起工作,請參閱[jQuery文檔](http://api.jquery.com/prop/)以獲取更多信息。查看它後,從jQuery 1.6開始'.prop(「checked」,true)'與'.attr(「checked」,checked「)相同' – Jay

+1

你檢查了這個http://stackoverflow.com/questions/5874652/prop-vs-attr? – Sergio

3

你不太正確選擇的DOM元素。 el應該'#' + el

$("#" + el).prop("checked", true); 

Fiddle demo.

編輯

感謝@Blender,document.getElementById(el).checked = true似乎環島更低的方式。

+4

或者只是'document.getElementById(el).checked = true' – Blender

2

您可以選擇在跨頁列表中的元素,然後過濾使用的頁列表:

var chkBoxes = $("#" + idContainerArray.join(",#")); 
chkBoxes = chkBoxes.filter("#" + idArray.join(",#")); 
chkBoxes.prop("checked", true); 

您可以省略過濾器。是否可以將idContainerArray中包含的元素用作當前頁面上的標識,但而不是是否包含在idArray?因爲,如果沒有,你可以跳過過濾,只是這樣做:

$("#" + idContainerArray.join(",#")).prop("checked", true); 

即使ID可重複使用的不是一個複選框,其他的東西這工作。如果將被選中的屬性寫入非複選框元素,則該屬性不會受到傷害或產生任何副作用。如果ID可重複使用,而不是作爲一個複選框,你不想寫checked屬性,可以過濾掉非複選框:

$("#" + idContainerArray.join(",#")).filter(":checkbox").prop("checked", true); 

或者:

$("#" + idContainerArray.join("[type=checkbox],#") + "[type=checkbox]").prop("checked", true); 

這種不使用jQuery的:checkbox簡寫的第二種技術可能會更快,因爲它會利用瀏覽器的原生querySelectorAll()調用。在大多數頁面上,你不會注意到有什麼區別。

相關問題