目前我使用的dijit /表格/选择显示的选项列表,我需要以编程方式更新内容dijit/form/Select
。
目前我使用.set('value', ...);
但我注意到,事件change
被解雇(这是在我的情况是不想要)。
我需要能够无需解雇更新窗口小部件并选择一个值change
事件。
该change
事件,据我所知,这应该被解雇,只有当一个用户“改变”选择列表中点击它的价值。
require(["dijit/form/Select", "dojo/data/ObjectStore", "dojo/store/Memory", "dojo/domReady!" ], function(Select) { var options = [{ label: "TN", value: "Tennessee" }, { label: "VA", value: "Virginia", selected: true }, { label: "WA", value: "Washington" }, { label: "FL", value: "Florida" }, { label: "CA", value: "California" }]; var s = new Select({ options: options }, "target"); s.startup(); s.on("change", function() { console.log("my value: " + s.get("value")) }); // updating options options.push({ label: "MI", value: "Milan", selected: true }); s.set('options', options); s.reset(); // issue here, the following line trigger event change s.set('value', 'mi'); })
<link href="//ajax.googleapis.com/ajax/libs/dojo/1.10.0/dijit/themes/claro/claro.css" rel="stylesheet" /> <script src="//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js"></script> <body class="claro"> <div id="target"></div> </body>
_setValueAttr
还具有第二个参数- priorityChange
。 如果你把它设置为false, onChange
事件不会被解雇。
从API文档版本1.6(见_setValueAttr的方法):
_setValueAttr
覆盖dijit.form._FormValueWidget,dijit.form._FormSelectWidget
设置控件的值。 如果值发生了变化,然后发出onChange事件,除非priorityChange指定为空(或假的?)
BTW。 如果你想添加一个选项就没有必要更换整组选项-你可以调用s.addOption(newOption)
require(["dijit/form/Select", "dojo/data/ObjectStore", "dojo/store/Memory", "dojo/domReady!" ], function(Select) { var options = [{ label: "TN", value: "Tennessee" }, { label: "VA", value: "Virginia", selected: true }, { label: "WA", value: "Washington" }, { label: "FL", value: "Florida" }, { label: "CA", value: "California" }]; var s = new Select({ options: options }, "target"); s.startup(); s.on("change", function() { console.log("my value: " + s.get("value")) }); // updating options options.push({ label: "MI", value: "Milan", selected: true }); s.set('options', options); s.reset(); // issue here, the following line trigger event change s.set('value', 'Milan', false); })
<link href="//ajax.googleapis.com/ajax/libs/dojo/1.10.0/dijit/themes/claro/claro.css" rel="stylesheet" /> <script src="//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js"></script> <body class="claro"> <div id="target"></div> </body>
我发现周围使用此问题的工作:
myWidget.set('_onChangeActive', false); // prevent firing change
myWidget.set('value', 'Milan', false);
myWidget.set('_onChangeActive', true); // reset to default
其中当使用作品也.set()
连续多个部件。
又路过false作为第三个参数.set()
的作品,如果你在一个时间只改变一个小部件。
s.set('value', 'Milan', false);
注:我不能使用找到第三个参数官方文档中引用.set()
相关问题: 道场选择onChange事件触发编程改变值时
require(["dijit/form/Select", "dojo/data/ObjectStore", "dojo/store/Memory", "dojo/domReady!" ], function(Select) { var options = [{ label: "TN", value: "Tennessee" }, { label: "VA", value: "Virginia", selected: true }, { label: "WA", value: "Washington" }, { label: "FL", value: "Florida" }, { label: "CA", value: "California" }]; var s = new Select({ options: options }, "target"); s.startup(); s.on("change", function() { console.log("my value: " + s.get("value")) }); // updating options options.push({ label: "MI", value: "Milan", selected: true }); s.set('options', options); s.reset(); s.set('_onChangeActive', false); // prevent firing change s.set('value', 'Milan', false); s.set('_onChangeActive', true); })
<link href="//ajax.googleapis.com/ajax/libs/dojo/1.10.0/dijit/themes/claro/claro.css" rel="stylesheet" /> <script src="//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js"></script> <body class="claro"> <div id="target"></div> </body>