在项目中需要给select绑定改变事件,来触发动作,但是发现改变一次select,onchange方法执行两遍
//这是那个标签,用的是我们公司内部的selectlist
<select class="selectpicker" id="gglb" name="bulletinclass"
title="请选择 公告类别" data-live-search="false" data-width="" ></select>
//公告类别的变更时间联动公告模板
$("#test").change(function () {
alert(1);
})
后来给select 标签添加一个onchange属性也会触发两次,这个onchange时间的机制是,在获取焦点之后,储存一个select里面的值,当发现这个值改变的时候,触发onchange事件
目前仅在IE8下发现此类问题,我仅测试了IE8/Chrome25/Firefox19
网上说可以通过一个全局变量控制来拒绝,不过方法很笨,还有一种方法就是用settimeout
$("#test").change(function () {
var thatFun=arguments.callee;//获得这个函数本身
var that=this;//获得这个元素
$(that).unbind("change");//去掉绑定
//在这里执行代码do ti
//重新绑定这个函数
setTimeout(function(){$(that).bind("change",thatFun)},0);
})