javascript - 为什么 select 的 onChange 事件不会触发?

标签 javascript dom

function updateText(){
    alert(fontsize.options[fontsize.selectedIndex].value);
}

var fontsize = document.getElementById("fontsize");
fontsize.addEventListener('onChange','updateText',false);  

这是我的 JavaScript,用于处理网页上字体大小的选择。但是,当我在下拉列表中选择不同的值时,什么也没有发生。

控制台日志中也没有错误。

所以,我的问题是:
1. 为什么不起作用?
2. 为什么推荐使用事件委托(delegate)模型而不是<select onchange="someMethod()">

最佳答案

两个问题:

  1. 该事件名为 change ,不是onchangeonchange是 HTML 属性和 DOM 属性的名称。

  2. 您必须将函数传递给 addEventListener ,不是字符串。

所以

fontsize.addEventListener('change', updateText, false);

应该可以。

看来你正在混合inlinetraditional事件处理程序 advanced event handlers .

等效的内联事件处理程序:

<select id="fontsize" onchange="updateText()">

或者(不要这样做):

fontsize.setAttribute('onchange', 'updateText()');

除非您只是对某些东西进行原型(prototype)设计,否则使用内联事件处理程序通常不是一个好主意,请参见下文。

等效的传统事件处理程序:

fontsize.onchange = updateText;
<小时/>

Why is using event delegation model recommended over <select onchange="someMethod()">

这与 event delegation 没有任何关系。事件委托(delegate)是一个独立于事件处理程序绑定(bind)方式的概念。出于实际原因不使用内联事件处理程序,请参阅此处我的答案 onclick="" vs event handler .

我还建议阅读articles on quirksmode.org我认为这解释了您需要了解的有关事件处理程序的所有信息。

关于javascript - 为什么 select 的 onChange 事件不会触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22586385/

相关文章:

javascript - 每隔一段时间从目录加载图像

javascript - 以字符串形式获取完整的 DOM 堆栈

jquery - 如何在 HTML、DOM 中使用 jQuery 检测元标记

CSS 非定位框

jQuery:如何创建一个新元素并将其添加到集合中?

javascript - 将大型数据集加载到 crossfilter/dc.js

javascript - sessionStorage 登录变量的 Angular 路由解析

javascript - 使用 Lodash 比较对象数组和整数数组

javascript - 如何将相同类型的多个参数传递给 jQuery Get

javascript - 如何使用 jQuery 选择器获取此元素?