關於dijit.form.Select中addOption()的一點注意事項

dijit.form.Select的addOption()函數是一個很好的功能,方便我們用編程的方法動態添加<option>結點到Select中。

不過如果遇到下面這樣的問題,希望不要重走本人的老路,花冤枉時間。(Dojo 1.7.3)

 

HTML代碼

<table>
		<tr>
			<td><label for="cb1">Check Box 1:</label>
			</td>
			<td><select id="cb1"
				name="cb1" style="width: 100px"
				data-dojo-type="dijit.form.Select">
			</select></td>
		</tr>
		<tr>
			<td><label for="cb2">Check Box 2:</label>
			</td>
			<td><select id="cb2"
				name="cb2" style="width: 100px"
				data-dojo-type="dijit.form.Select">
			</select></td>
		</tr>
	</table>

JS代碼

		require(
				[ "dojo/ready", "dojo/_base/xhr", "dojo/json", "dijit/registry", "dojo/_base/array" ],
				function(ready, xhr, JSON, registry, array) {
					ready(function() {
						var cb1 = registry.byId("cb1");
						var cb2 = registry.byId("cb2");
						
						var options = [
							{
								value: "op1",
								label: "option 1"
							},{
								value: "op2",
								label: "option 2"
							}
						];
						array.forEach(options, function(option){
							cb1.addOption(option);
							cb2.addOption(option);
						});
						
						cb1.set("value", "op1");
						cb2.set("value", "op2");
					});
				});

從JS代碼來看,cb1當前選中的是op1,cb2當前選中的是op2。但是如果用cb1.get(“value”)取得當前選中的值,得到的卻是”op2”!

問題就出在同一個options變量被同時賦給了cb1和cb2,這樣做似乎導致它們的option有了關聯。

改成下面這種實現方法就可以避免這個問題了:

JS代碼

		require(
				[ "dojo/ready", "dojo/_base/xhr", "dojo/json", "dijit/registry", "dojo/_base/array" ],
				function(ready, xhr, JSON, registry, array) {
					ready(function() {
						var cb1 = registry.byId("cb1");
						var cb2 = registry.byId("cb2");
						
						var options1 = [
							{
								value: "op1",
								label: "option 1"
							},{
								value: "op2",
								label: "option 2"
							}
						];
						var options2 = [
										{
											value: "op1",
											label: "option 1"
										},{
											value: "op2",
											label: "option 2"
										}
									];
						array.forEach(options1, function(option){
							cb1.addOption(option);
						});
						array.forEach(options2, function(option){
							cb2.addOption(option);
						});
						
						cb1.set("value", "op1");
						cb2.set("value", "op2");
					});
				});

有興趣的可以追溯一下dijit.form.Select的源碼。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章