如何以编程方式更改选择,以便它触发其 onchange 行为?
-
22-07-2019 - |
题
这似乎不起作用:
<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设置的值
您可以看看这些问题及其答案:他们可能会有所帮助:
- 检测 html 选择框上的编程更改。
- 如何以编程方式在输入上强制执行 onchange 事件? (专注于输入,而不是选择,但可能仍然有用)
有关任何人都希望使用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。
不隶属于 StackOverflow