在最近的项目中,有这样一个
功能点:
网页上有一个复选框,当
用户选择或
取消选择该复选框,它将发回JSONP请求。当时实施的是添加一个onchange事件复选框,但结果是意想不到的。为此,我进行了深入的研究,
发现存在以下的OnChange事件IE和FF下的
性能问题。
问题1:在FF,当复选框的选中状态改变,将立即触发onchange事件。但当复选框选中状态改变下即onchange事件不会立刻出发,但事件在开始的时候会checbox
等待失去焦点。
为了
解决这一问题,我添加的复选框,onclick事件this.blur(中)这一说法,这是因为onclick事件是在onChange事件
执行,并在Onclick事件this.blur加法(复选框)将立即失去onchange事件的焦点。在这种方式中,有二其他问题。
问题2:当onclick事件和this.blur同时使用,误差会在IE了
我们发现了一些互联网上的信息,终于找到了onpropertychange事件。此事件将不会触发下FF,即当复选框的选择状态的变化,它会立即开始。因此,最终的解决方案是:在IE中,达到的onpropertychange事件绑定复选框,和onchange事件势必在FF。
具体代码实现如下:
复制代码代码如下所示:
var ua = navigator.useragent.tolowercase();
var = null;
var
浏览器{
Msie:(S = ua.match( / MSIE *({ D 。} +)/))的{ 1 }:假,
火狐:(S = ua.match( / / Firefox({ D 。} +)/))的{ 1 }:假,
铬:(S = ua.match( / /铬({ D 。} +)/))的{ 1 }:假,
歌剧:(S = ua.match( /歌剧。(({ +)}) { 1 }:false,
野生动物园:(S = ua.match( / / varsion({ D 。} +)* Safari /))的{ 1 }:假
};
如果(浏览器。MSIE){ / /如果IE浏览器
复选框。onpropertychange =
函数(){
/ /做某事
}
}
别的{
复选框。onchange =函数(){
做某事
}
}