2011-04-06 88 views
1

我試圖從ajax接收的數據中動態選擇多選框中的選項。在名稱中使用「[]」在多個選擇框中選擇多個選項,使用ajax

HTML

<select multiple="multiple" id="sbox[]" name="sbox[]"> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
</select> 

JQuery的

$.post(
    "test.php", 
    { 
     action: "test" 
    }, 
    function(data) { 
     //data received is in the format of "2,3" 
     splitText = data.split(","); 
     $.each(splitText, function(k,v) { 
      $("#sbox[]").children("option[value="+v+"]").attr("selected","selected"); 
     }); 
    } 
); 

但它無法正常工作。

+1

寫'+ v +'而不是'+ value +' – diEcho 2011-04-06 07:43:26

+0

已經說過兩次了,這是一個錯字,我修正了它。 – mrN 2011-04-06 07:49:43

回答

1

它不工作,因爲jQuery認爲#sbox[]是ID選擇器#sbox與空屬性選擇器[],這是無效的。

你可以跳過方括號,所以你的選擇器變成#sbox\[\]。但是方括號在你的ID中並不需要首先使用;只需將它稱爲id="sbox"並選擇#sbox。方括號只在name屬性中用於將您的選擇指定爲一組值。

+0

那麼,通常它不是必需的,但表單是通過序列化字段來提交的,所以要將它作爲數組來抓取,我需要使用括號。 – mrN 2011-04-06 07:43:08

+2

@mrN:這是'name'屬性,而不是'id'。 – BoltClock 2011-04-06 07:44:34

+0

@BoltClock,沒關係,如果我不使用id中的方括號。 – mrN 2011-04-06 07:46:07

0

您在每個循環,而不是v使用value像參數在聲明

$.each(splitText, function(k,v) { 
     $("#sbox[]").children("option[value="+v+"]").attr("selected","selected"); 
    }); 
+0

哦......糟糕,這是一個錯字,所以 – mrN 2011-04-06 07:44:23

0

名爲如果這是您使用確切的代碼,比$。每個值是不確定的。你在函數中使用v標識符。應該像

$("#sbox[]").children("option[value="+v+"]").attr("selected","selected"); 

而你應該改變身份證。從w3開始,不允許使用[]符號

指定元素的唯一ID。命名規則:

必須以字母AZ或az 之後可以開始:字母(A-ZA-Z), 數字(0-9),連字符( 「 - 」), 下劃線(「_ 「),冒號(」: 「),和 句點(」「)的值是 區分大小寫

+0

是的,這是一個錯字,我糾正了它。 – mrN 2011-04-06 07:45:14

0

這將是更容易,如果你改變了ID。

如果你絕對必須做到這一點,你必須逃離括號內,因爲他們在選擇語法中使用

change $("#sbox[]") 

to $("#sbox\[\]") 
2

嘗試

$.post(
    url: "test.php", 
    function(data) { 
     //data received is in the format of "2,3" 
     splitText = data.split(","); 
     $.each(splitText, function(k,v) { 
      $("#sbox\[\]").children("option[value="+v+"]").attr("selected","selected"); 
     }); 
    } 
); 
0

有幾種可能出現的問題在這裏,嘗試了這一點:

$.post(
"test.php", 
{ 
    action: "test" 
}, 
function(data) { 
    //data received is in the format of "2,3" 
    var splitText = data.split(","); 
    var select = $('[id="sbox[]"]').get(0); 
    $.each(splitText, function(k,v) { 
     $.each(select.options, function(i, option) { 
      if(option.value == v) 
       option.selected = true; 
      else 
       option.selected = false; 
     }); 
    }); 
} 
); 

第一件事是,#id選擇器工作良好時id是字母數字(也允許使用-_)。因此,要使用id中的[]子字符串,您希望使用屬性選擇器來查找它。或者,如果它是以sbox開頭的唯一ID,則可以嘗試以下操作:$('[id^=sbox]')

另一個可能修復的項目是在<option>上設置selected屬性。我不確定它是否按預期工作,但如上所示處理Option DOM對象應該可以正常工作。

最後一個是次要更正 - 您在每個循環迭代中定位<select>元素,可能在循環開始之前您想要這樣做。

希望這會有所幫助。

相關問題