如何以编程方式更改选择以激活其onchange行为?

时间:2009-08-03 21:30:20

标签: javascript select onchange

这似乎不起作用:

<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>

(我正在使用道场,但这并不重要。)

5 个答案:

答案 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。