2012-12-12 65 views
0

我正在使用dojo 1.6,我遇到的問題非常獨特。看看下面的代碼:無法在dojo中選擇任何選項選擇

var dd = new dijit.form.Select({ 
     id: 'dd', 
     options: [{label:'option1'}, {label: 'option2'}], 
    }); 
dojo.connect(dd, "onChange", this, function(){ 
     console.debug("trying to catch the change"); 
    }); 

所以按照上面的代碼我應該得到下一個下降,並能夠在下拉改變價值和dojo.connect趕上事件。雖然我確實得到了一個下拉菜單,默認情況下已選擇option1,但我無法選擇option2。請注意,這兩個選項在下拉列表中都可見,但選擇不起作用。 我在道場上相當陌生,但從所有例子來看,這似乎是下降的最低要求。我會很感激任何反饋。 編輯: 因此,事實證明,如果我設置選項,如[{label: 'option1', value: 1}, {label: 'option2', value:2}]然後一切正常,因爲我想。但是有人可以解釋一下這裏價值的作用,爲什麼它必須始終處於整數狀態?

回答

0

如果您提交包含選擇的表單,則該值是將發送到服務器的文本。

它類似於option標記,其值屬性爲:<option value="op1">option1</option>。如果您省略標籤上的值屬性,提交的文本將只是標籤文本「option1」。

值不一定是整數 - 只要foo在選項中是唯一的,您可以選擇{label: foo, value: foo}。如果你在這裏省略了value屬性,那麼提交的值將是未定義的,並且dijit將會(正如你注意到的那樣)表現得通常很奇怪。

經過一些實驗後編輯:使用Select dijit時,options數組中的值(或者實際上,存儲區中的id)必須是字符串。否則,給選擇一個默認值將不起作用。例如: -

new Select({ 
    value: 3, 
    options: [ {label: "foo", value: 1}, {label: "bar", value: 3}] 
}) 

..將集「酒吧」作爲默認選擇的選項,並強調在下拉列表中選擇的項目不起作用。您必須使用帶字符串值的選項陣列:

options: [ {label: "foo", value: "1"}, {label: "bar", value: "3"}] 

不是100%確定背後的原因。

+0

我還沒有嘗試一個字符串作爲我的價值,但我知道如果我使用了像123499這樣的數字,那麼它仍然會以奇怪的行爲結束。出於某種原因,或者至少在我的情況下,它必須是1,2,3 ......等等。謝謝你的解釋! – Shay

+0

我依稀記得在商店中有一些id爲數字的問題,但不直接在選擇dijit中。在商店的情況下,我不得不將id號碼轉換爲字符串。我認爲這與對象屬性順序不能保證數值屬性名稱有關,但其他人可以更好地回答。 – Frode

+0

您是否有任何參考資料或您正在使用的dojo版本?因爲現在我正在使用dojo 1.6,我不需要分配字符串值。我想如果跳出順序,你將不得不保持他們的字符串。例如:'options:[{label:「foo」,value:1},{label:「bar」,value:2}]'對我來說工作正常。但是,如果我跳過'2',那麼我需要按照您所示的方式使它們成爲字符串。另外,另一種更改默認值的方法是'options:[{label:「foo」,value:1},{label:「bar」,value:2,selected:true}]'。不知道這是否會在你的版本中起作用。 – Shay