2009-08-03 85 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); 
相關問題