2011-06-15 72 views
3

我有一個用逗號分隔的字符串。我使用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> 

該數組僅包含需要檢查的值。這些值從JSON編碼的AJAX調用回送。但是,這些值(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"); 
} 

我遙遠的那一個。哈!

謝謝你們!

回答

5
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'); 
+0

如果你使用的是新版本的jQuery(1.6+),.prop(「checked」,true)是一個更好的選擇。 attr(「checked」,「checked」) – EvilAmarant7x 2011-06-15 13:43:18

2

有幾件事情是錯誤的。您的選擇器不正確,並且您使用了錯誤的循環變量(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
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"); 
} 

可以see it in action here

0
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的lib名爲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(data,options)會給你一塊html。 ,你可以將它追加到$('table tr') 在你的後端,你只需要將所有選項轉儲到一個json字符串中。 而你的客戶端可以很容易地得到它,因爲這個所謂的'all_options'