这似乎不起作用:
<select id="mySel" onchange="alert('foo')">
<option value="a">a</option>
<option value="b">b</option>
</select>
<script>
dojo.byId('mySel').value = 'b'; // select changes, but nothing is alerted
</script>
(我正在使用道场,但这并不重要。)
答案 0 :(得分:6)
'onchange'名称有点误导,除非您了解更改事件和更改的值不是同一件事。当用户更改浏览器中的值时,会发生更改事件。我相信您可以在以编程方式更改值后通过调用dojo.byId('mySel').onchange()
手动触发事件。 (你可能需要实际定义一个调用alert
的函数。我自己没有这样做过。)
答案 1 :(得分:3)
这将更改值但不会触发onchange事件。每次使用JavaScript修改元素时,都不会触发事件(阻止您进入递归问题*)。
如果您设置了这样的事件处理程序。
function myHandler(){
//do whatever stuff here
changeColor( dojo.byId('mySel') );
}
然后你可以在以编程方式设置值后单独调用它。
注意(*):我不是道场专家......所以我假设他们没有“添加”从JavaScript设置值时自动调用事件处理程序。
答案 2 :(得分:2)
您可以查看这些问题及其答案:它们可能有所帮助:
答案 3 :(得分:1)
您可以访问事件'onpropertychange',它包含事件参数中的属性,以标识更改了哪个属性。
它检测'selectedIndex'和'value'变化 - 只是案例测试'propertyName'
<select id="mySel" onpropertychange="dothis(event);">
<option value="a">a</option>
<option value="b">b</option>
</select>
function dothis(event)
{
if (event.propertyName == "selectedIndex")
alert('selection changed');
}
脱离我的头脑......(目前使用的是非常不同的asp.net js框架)
答案 4 :(得分:0)
尝试分配selectedIndex。