这似乎不起作用:

<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,但这并不重要。)

有帮助吗?

解决方案

除非你明白一个变化的事件的和值被改变是不一样的东西的'平变化的名字是有点误导。当用户改变在浏览器中值,将发生变化事件。我相信你可以通过调用dojo.byId('mySel').onchange()编程更改后的值,但手动触发事件。 (您可能需要实际定义调用alert功能,虽然我还没有这个做我自己。)

其他提示

这将改变值,但不会触发onchange事件。修改使用JavaScript它不会触发事件元素的任何时间(阻止你进入递归问题*)。

如果设置了一个事件处理程序,像这样。

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

然后可以分别调用此,所设置的值编程之后。

注(*):我不是一个道场专家...所以我假定他们没有“补充”的事件处理程序的自动呼叫时,可以通过JavaScript设置的值

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

有关任何人都希望使用JavaScript来触发change事件。

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

您可以访问事件“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框架这是相当不同升技)

尝试而不是分配的selectedIndex。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top