如何使用
JavaScript更改HTML< select>的选项(没有任何类似jQuery的库),同时触发与用户进行更改相同的事件?
例如使用以下代码,如果我用鼠标更改选项,则事件触发(即onchange运行).但是,当我使用JavaScript更改选项时,它不会触发任何事件.当使用JavaScript选择一个选项时,是否可以触发相关联的事件处理程序,如onclick,onchange等?
<select id="sel" onchange='alert("changed")'> <option value='1'>One</option> <option value='2'>Two</option> <option value='3'>Three</option> </select> <input type="button" onclick='document.getElementById("sel").options[1].selected = true;' value="Change option to 2" />
解决方法
不幸的是,您需要手动触发更改事件.而
Event Contructor将是最好的解决方案.
var select = document.querySelector('#sel'),input = document.querySelector('input[type="button"]'); select.addEventListener('change',function(){ alert('changed'); }); input.addEventListener('click',function(){ select.value = 2; select.dispatchEvent(new Event('change')); });
<select id="sel" onchange='alert("changed")'> <option value='1'>One</option> <option value='2'>Two</option> <option value='3' selected>Three</option> </select> <input type="button" value="Change option to 2" />
当然,IE不支持Event构造函数.所以您可能需要使用以下方式进行polyfill:
function Event( event,params ) { params = params || { bubbles: false,cancelable: false,detail: undefined }; var evt = document.createEvent( 'CustomEvent' ); evt.initCustomEvent( event,params.bubbles,params.cancelable,params.detail ); return evt; }