问题:我给 select
绑定了 change
事件,然后根据选择的 option
数据进行对应操作,但是有个问题是,如果我第二次选择上次一样的 option
是无法触发事件。因为没有 change 所以没有执行。但是我想要不管改变没有,都要执行对应选择 option
的方法。我使用 select
事件也不行,请问大家有没有办法。不行的话,我就用 ul li
模拟一个下拉选择了。
我的实现存在问题,感谢@边城的指出,采用他的答案
以下的原答案:
如果用change
的话,会出现题主描述的情况那样;
如果用click
的话,那么点击select
下拉的时候也会触发事件;
然而option
又不能绑定click
事件...
自己动手,丰衣足食:
Element.prototype.onSelectChange = function(callback) {
var cached = 0;
this.addEventListener("click", function(event) {
if (cached == this) {
callback.call(this, event);
cached = 0;
} else {
cached = this;
}
});
}
使用方法:
var select = document.getElementById("select");
select.onSelectChange(function(event) {
// code here;
});
在 Stack Overflow 找到一个回答(某楼),很巧妙,但原理尚不明确
$('select').on('click',function(ev){
if(ev.offsetY < 0){
//user click on option
}else{
//dropdown is shown
}
});
亲测有效,而且键盘选的都会触发 click
https://jsfiddle.net/jamesfan...