有没有一种方法可以在Chrome中的Select Option元素上添加事件
Is there a way to add Events on Select Option Elements in Chrome?
我正在尝试向<select>
元素添加自定义样式,由于跨浏览器的限制,我需要知道:
- 当选择下拉列表展开时(我在谷歌上快速搜索了一下,但似乎不可能)
- 在
<option>
元素上添加事件
第二个选项似乎适用于除Chrome以外的所有浏览器。我宁愿避免做一些讨厌的浏览器检测,所以如果有人有建议的话,我正在寻找解决这两个选项中任何一个的方法??
以下适用于除Chrome以外的所有浏览器:
<select id="gender" name="gender">
<option></option>
<option class="click">Male</option>
<option>Female</option>
<option>Other</option>
</select>
<script>
element = document.getElementById('gender');
for (var iterator = 0; iterator < element.options.length; iterator++) {
var optionElement = element.options[iterator];
if (optionElement.className == 'click') {
optionElement.addEventListener('click', function() {alert('gender')})
}
}
</script>
我不能在<select>
上使用事件的原因是,我需要知道下拉列表是否展开(上面的第1点)。我也考虑过使用onChange
事件,但浏览器对它的反应似乎不同。有些浏览器在单击时会做出反应,另一些则在更改值时做出反应。
我的两个选项似乎都不可行(除非有人能修复坏事件)。
选项1.我试图在select上实现一些"扩展跟踪器",以了解元素何时实际扩展,但由于浏览器处理select的方式不同,这似乎是不可能完成的任务。即使找到了某种神奇的配方,它对未来的任何浏览器更新都是脆弱的。
选项2.考虑到Firefox在处理onchange
事件时也会出现错误,我不知道有什么方法可以解决这类问题,也不知道如何迫使Chrome对它似乎忽略的事件做出反应(也许一些JavaScript大师可以在这里提出一些时髦的解决方案,但我会感到惊讶)。
因此,经过几次尝试,似乎<select>
的行为有三个主要差异:
- IE 10及更低版本使用非常有限的渲染引擎进行下拉(就风格而言)
- Firefox在使用键盘时无法正确处理
onchange
事件 - Chrome会忽略
<option>
事件
考虑到这种糟糕的组合,我不得不求助于:
- 对IE使用条件<=10个浏览器
- 添加一个
onkeydown
事件来修复Firefox的onchange
情况 - 仅使用select事件来绕过Chrome的限制
Firefox上的渲染效果并不理想,因为存在某种延迟,但考虑到<select>
元素的非标准性,这看起来是最好的。
我没有过多地了解我试图做什么的细节,但实际上我试图在选定的元素上实现一个"占位符样式",以便在我的表单上有一个统一的外观和感觉。有趣的部分是不同的浏览器如何处理<select>
样式,以及当下拉菜单展开时和不展开时样式如何不同。
试试这个:
element = document.getElementById('gender');
element.addEventListener('change', function() {
if (this.value === 'Male') {
alert(this.value);
}
});
此代码已在OSX上用Chrome、Firefox和Safari进行了测试。
- 使用javascript动态更改select中的最大值
- 在javascript中获取select中的选项值
- jQuery——更改SELECT中的值不会触发AJAX事件
- 用特殊字符选择select中的值
- Jquery-背景图像随select中的数据属性而变化
- Angularjs:select中的递归指令
- jquery在循环select中的项时转义特殊字符
- 如何通过 #ID 100% AngularJS获取元素SELECT中的文本和值
- 如何将 select 中的文本与 js 中的数组匹配
- 动态更新select中的选项
- angular ui select中的ng disabled选项会缩小文本框
- select中的enable或disable选项
- 如何在Bootstrap select中的下拉菜单关闭时触发事件,并在Backbone.js中进行多选
- 如何使用javascript和css为select中的选项设置不透明度
- 避免jquery select中的类型错误
- bootstrap-select中的Ng-options不起作用
- 如何使用jQuery截断select中的选项文本
- 没有显示select中的数据
- 根据form_for select中的选定值显示空文本框
- 使用AngularJS时,select中的默认选项不起作用