2009-08-03 32 views
6

这似乎并不奏效:(我使用的道场,但这并不重要)如何以编程方式更改选择,以便触发其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> 

+0

可能的重复。今天看到这个。 – EFraim 2009-08-03 21:32:24

+0

我做了一个搜索,但没有找到任何东西。 – sprugman 2009-08-03 21:34:22

回答

6

'onchange'的名字是有点误导,除非你明白事件和被改变的值不是一回事。当用户更改浏览器中的值时,会发生更改事件。不过,我相信你可以通过调用dojo.byId('mySel').onchange()以编程方式更改值手动触发事件。 (您可能需要实际定义一个调用alert的函数,但我自己并没有这样做。)

3

这将更改该值,但不会触发onchange事件。任何时候你用JavaScript修改元素都不会触发事件(阻止你进入递归问题*)。

如果您设置了如此的事件处理程序。

function myHandler(){ 
    //do whatever stuff here 
    changeColor(dojo.byId('mySel')); 
} 

然后你可以单独调用它,然后你以编程方式设置该值。 (*):我不是一个道场专家......所以我假设他们在你设置JavaScript值时没有“添加”自动调用事件处理程序。

0

尝试改为指定selectedIndex。

1

您可以访问事件'onpropertychange',它包含事件参数中的一个属性以标识哪个属性发生了变化。

它同时检测“的selectedIndex”和“价值”的变化 - 只是情况测试“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框架这是相当提高不同)

0

对于任何想使用javascript触发change事件的人。

 var evObj = document.createEvent("HTMLEvents"); 
     evObj.initEvent("change", true, true); 
     var elem = document.getElementById('some-id'); 
     elem.dispatchEvent(evObj); 
相关问题