8

这似乎不起作用:

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

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

4

6 回答 6

8

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

于 2009-08-03T21:40:19.503 回答
3

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

如果您像这样设置事件处理程序。

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

那么您可以在以编程方式设置值之后单独调用它。

注意(*):我不是道场专家......所以我假设当您从 JavaScript 设置值时,他们没有“添加”事件处理程序的自动调用。

于 2009-08-03T21:37:24.687 回答
3

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

        var evObj = document.createEvent("HTMLEvents");
        evObj.initEvent("change", true, true);
        var elem = document.getElementById('some-id');
        elem.dispatchEvent(evObj);
于 2015-08-15T16:11:06.990 回答
2

您可以看看这些问题及其答案:它们可能会有所帮助:

于 2009-08-03T21:36:58.073 回答
1

您可以访问事件“onpropertychange”,它在事件参数中包含一个属性,以识别更改了哪个属性。

它同时检测 'selectedIndex' 和 'value' 的变化——简单的 case test '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框架有很大的不同)

于 2009-09-07T22:19:11.627 回答
0

尝试分配 selectedIndex 代替。

于 2009-08-03T21:37:53.097 回答