2012-12-12 60 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