解决其他浏览器没有propertychange事件
监听实现:
/**
* Listener.js
* 此类用于解决非ie下,通过js改变input的值时,
* 无法触发其事件的问题(如:onpropertychange, oninput, onchange)
*/
function Listener() {
//定时器
var interval_l = null;
//key:name,value:value. 用于判断元素value是否变更
var objValMap = new Map();
//定时扫描的元素集
var targetObjects = null;
//检查当前浏览器是否是ie
var isIe = function () {
return jQuery.browser.msie;
}; //检查当前监听器中是否有绑定监听对象
var isEmpty = function () {
if (targetObjects == null || targetObjects.length == 0) {
return true;
}
return false;
}; //定时执行的内容
var execute = function (exeattr) {
if (isIe() && !isEmpty()) {
return;
}
if(isEmpty()){return;}
//迭代元素集合
jQuery.each(targetObjects, function (i, n) {
var oldVal = objValMap.get(n.name);
var _element = jQuery("input[name=" + n.name + "]")[0];
var newVal = _element.value;
if (oldVal != newVal) {
objValMap.put(n.name, n.value);
var _callbak = jQuery(_element).attr(exeattr);
try {
eval(_callbak);
} catch(e) {}
}
});
};
//开始执行
var start = function (seed, exeattr) {
if (isIe() && !isEmpty()) {
return;
}
if (seed == undefined || seed == 0) {
seed = 500;
}
if (exeattr == undefined) {
exeattr = "_listener";
}
interval_l = window.setInterval(function () {execute(exeattr);}, seed);
}
//停止监听器
var stop = function () {
if (interval_l) {
window.clearInterval(interval_l);
}
};
//绑定监听对象
var load = function (selector) { if (isIe()) {
return;
}
if (selector == undefined) {
selector = "input[type=hidden][_listener!='']";
}
targetObjects = jQuery(selector);
jQuery.each(targetObjects, function (i, n) {
objValMap.put(n.name, n.value);
});
};
this.execute = execute;
this.start = start;
this.stop = stop;
this.load = load;
} /**
* 键值对,同Java Map
*/
function Map () {
var struct = function(key, value) {
this.key = key;
this.value = value;
}
var put = function(key, value){
for (var i = 0; i < this.arr.length; i++) {
if ( this.arr[i].key === key ) {
this.arr[i].value = value;
return;
}
}
this.arr[this.arr.length] = new struct(key, value);
} var get = function(key) {
for (var i = 0; i < this.arr.length; i++) {
if ( this.arr[i].key === key ) {
return this.arr[i].value;
}
}
return null;
} var remove = function(key) {
var v;
for (var i = 0; i < this.arr.length; i++) {
v = this.arr.pop();
if ( v.key === key ) {
continue;
}
this.arr.unshift(v);
}
} var size = function() {
return this.arr.length;
} var isEmpty = function() {
return this.arr.length <= 0;
} this.arr = new Array();
this.get = get;
this.put = put;
this.remove = remove;
this.size = size;
this.isEmpty = isEmpty;
};
调用实例:
jQuery(document).ready(function(){
var ua=navigator.userAgent.toLowerCase();
var s=null;
var browser={
msie:(s=ua.match(/msie\s*([\d\.]+)/))?s[1]:false,
firefox:(s=ua.match(/firefox\/([\d\.]+)/))?s[1]:false,
chrome:(s=ua.match(/chrome\/([\d\.]+)/))?s[1]:false,
opera:(s=ua.match(/opera.([\d\.]+)/))?s[1]:false,
safari:(s=ua.match(/varsion\/([\d\.]+).*safari/))?s[1]:false
};
if(browser.msie){
jQuery("#field8304").bind("propertychange", getUp);
}else{
jQuery("#field8304").attr("_listener","getUp();");
}
var l = new Listener();
l.load("input[type=hidden][_listener!='']"); //不传参数时,默认参数为:"input[type=hidden][_listener!='']";
l.start(500, "_listener"); //不传参数时,默认参数为:500, "_listener"
});
function getUp(){
alert("change");
}
解决其他浏览器没有propertychange事件的更多相关文章
- propertychange事件导致的IE浏览器堆栈溢出
前段事件做项目,在IE下测试时,发现会报堆栈溢出的错误,其他浏览器正常,于是开始了苦逼的IE查错路程... 由于是在操作了某个输入框之后才出现的错误,所以把重点放到了input的相关事件,最终发现是这 ...
- 完美解决,浏览器下拉显示网址问题 | 完美解决,使用原生 scroll 写下拉刷新
在 web 开发过程中我们经常遇到,不想让用户下拉看到我的地址,也有时候在 div 中没有惯性滚动,就此也出了 iScroll 这种关于滚动条的框架,但是就为了一个体验去使用一个框架好像又不值得,今天 ...
- JavaScript 浏览器中的事件
1.事件的基本概念 事件是指在文档或者浏览器中发生的一些特定交互瞬间,比如打开某一个网页,浏览器加载完成后会触发 load 事件,当鼠标悬浮于某一个元素上时会触发 hover 事件,当鼠标点击某一个元 ...
- 解决内部元素onMouseOver/onMouseOut事件冒泡触发父元素的相应事件
前阵子为BS项目模板做了一个左侧滑动信息栏,效果类似于windows状态栏的自动隐藏效果,鼠标移进滑出,鼠标移出隐藏,浮动时不占用空间,也可以固定住占一块位置.做的过程中遇到一个问题,鼠标在信息栏内部 ...
- 如何阻止浏览器的默认事件,你是否也遇到过无法阻止Google默认事件的情况( 原生JS )
如题,话不多话,我们先看怎么解决 根据不同的绑定事件的方法,我们有不同的阻止默认事件的方法 如果你不知到如何绑定事件,请查看我的上一篇文章 关于浏览器滚动的兼容性问题以及事件绑定 1.句柄绑定 只需要 ...
- 10、网页制作Dreamweaver(扩展:各浏览器对 onunload 事件的支持与触发条件实现有差异)
标准参考 在 HTML 4.01 规范中关于 onunload 事件的描述是:当 document 从 window 中移除时,触发 onunload 事件. 关于 HTML 4.01 规范中 onu ...
- 各浏览器对 onbeforeunload 事件的支持与触发条件实现有差异
转载:http://www.w3help.org/zh-cn/causes/BX2047 标准参考 无. 问题描述 一般情况下,onbeforeunload 事件处理函数内会写入一些提示性语句,当用户 ...
- 解决chrome浏览器在win8下没有注册类的问题
解决chrome浏览器在win8下没有注册类的问题 新建一个txt,里面存放代码 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SO ...
- 解决IE浏览器缓存导致AJAX请求数据异常
IE10浏览器会把AJAX请求的数据都缓存下来,然后每次想去刷新数据时发现数据都是一样的,于是导致数据显示异常. 解决方法: 在页面<head>标签里,加上以下声明: <!-- 解决 ...
随机推荐
- nginx参数的详细说明
#开启进程数 <=CPU数 worker_processes 1; #错误日志保存位置 #error_log logs/error.log; #error_log logs/error.log ...
- day01课程回顾,数据类型
Day01 Python的分类 Cpython:代码àc字节码->机器码 一行一行的编译执行 Pypy: 代码àc字节码->机器码 全部转换完再执行 其他python 代码- ...
- [ext4]空间管理 - 查找块
在文件系统中,当需要执行写操作时,肯定是需要查找需要写入的块.那么如何查找块哪? 在Ext4系统中,有两个函数是可能执行查找操作的:ext4_getblk().ext4_get_block(). ...
- CSS的position/float/display
一.position position属性取值:static(默认).relative.absolute.fixed.inherit. postision:static:始终处于文档流给予的位置.它可 ...
- 蓝桥杯-李白打酒-java
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...
- 通过Servlet实现汉字验证码
package com; import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Gra ...
- 微信小程序之获取当前位置经纬度以及地图显示
最近刚开始接触微信小程序,在弄懂其结构以及相关接口之后,准备着手实现一个小程序,功能包括--获取用户当前位置的经纬度,在地图上查看位置,通过地图获取不同位置的经纬度. 微信小程序的主体部分包括: 新增 ...
- 使用Dotfuscator加密混淆程序以及如何脱壳反编译
混淆演示 首先介绍如何使用Dotfuscator对.net程序加密码混淆/加壳 C#或vb.net编写的应用程序或DLL. 这里随便创建了一个C#的命令行控制台程序.程序很简单,对当前的时间进行了AE ...
- c# 内存的具体表现- 通用类型系统 深拷贝 浅拷贝 函数传参
c# 通用类型系统 及变量在 深拷贝 浅拷贝 函数传参 中的深层次的表现 在编程中遇到了一些想不到的异常,跟踪发现,自己对于c#变量在内存上的表现理解有偏差,系统的学习并通过代码实验梳理了各种情况下, ...
- CSS3特效----制作立体导航栏菜单
使用CSS3实现下图的导航菜单效果 <!doctype html> <html lang="en"> <head> <meta chars ...