与浏览器相关的事件兼容

1、监听文本框输入

Firefox、Chrome、IE9,IE10 均支持 oninput 事件,此外所有版本的 IE 均支持 onpropertychange 事件。

oninput 事件在用户输入、退格(backspace)、删除(delete)、剪切(ctrl + x)、粘贴(ctrl + v)及鼠标剪切与粘贴时触发(在 IE9 中只在输入、粘贴、鼠标粘贴时触发)。

onpropertychange 事件在用户输入、退格(backspace)、删除(delete)、剪切(ctrl + x)、粘贴(ctrl + v)及鼠标剪切与粘贴时触发(在 IE9 中只在输入、粘贴、鼠标粘贴时触发)(仅 IE 支持)。

backspace、delete 两个按键的 keyCode 分别为 8、46。

oncut 事件在粘贴(ctrl + v)、鼠标粘贴时触发。

 

Demo Code:

var input = document.getElementById("test");
function fn() {
  // 你要执行的代码
}
 
if(window.addEventListener) { //先执行W3C
  input.addEventListener("input", fn, false);
} else {
  input.attachEvent("onpropertychange", fn);
 
}
 
if(window.VBArray && window.addEventListener) { //IE9
  input.attachEvent("onkeydown", function() {
    var key = window.event.keyCode;
    (key == 8 || key == 46) && fn();//处理回退与删除
 
  });
  input.attachEvent("oncut", fn);//处理粘贴
}

 来源:http://www.cnblogs.com/rubylouvre/archive/2013/02/17/2914604.html

 

二、onunload事件

  1、IE6,IE7,IE8 中 刷新页面、关闭浏览器之后、页面跳转之后都会执行;

  2、IE9 刷新页面 会执行,页面跳转、关闭浏览器不能执行;

  3、firefox(包括firefox3.6) 关闭标签之后、页面跳转之后、刷新页面之后能执行,但关闭浏览器不能执行;

  4、Safari 刷新页面、页面跳转之后会执行,但关闭浏览器不能执行;

  5、Opera、Chrome 任何情况都不执行。

 

三、onbeforeunload事件

  作用:当离开当前页面之前触发。包括(刷新、关闭)

  值:

    return 【必要】 的值 为你需要告诉用户的提示信息如上面demo的话浏览器的提示是这样(firefox 并不支持文字提醒):

    注:除IE之外,其他支持的浏览器,必须有return,且return 不能为空;否则该事件将不生效!另,IE事件处理回调函数内如果有alert,则会被执行,但其他浏览器将忽略它!

    值得注意的是,网上流传说 可以通过检查 e.clientX e.clientY 判断 用户是否点击 右上角关闭浏览器的,但是实践发现 只有 IE6,IE7,IE8 能获取得到具体数值,其他浏览器均为 undefined。

  

  1、IE、Chrome、Safari 完美支持

  2、Firefox 不支持文字提醒信息

  3、Opera 不支持

 

  IE6、IE7 bug:  

    凡是 <a> 标签 都会触发 onbeforeunload事件 包括 href=”javascript:void(0)” 这种。

    在IE6,IE7 下面 点击 里面的 a 标签,蛋疼的事情就发生了。

    解决方法:给这 a标签的 父级 添加 onclick=function(){return false} 即可,不过添加了这个之后 要确保 父级里面没有 input type=”checkbox” 的标签,否则会导致其无效不可点击。

 

  补充:

   我们知道引起当前页面发生条转主要3类事件:
      1、对浏览器窗口的操作,比如关闭浏览器、go home、backward、forward和refresh等;
      2、对于网页的Navigatie操作,比如点击链接、在地址栏中执行新的地址、页面表单提交到非当前页面等;
      3、脚本代码引起的页面Navigate操作,比如执行navigate、locatoin方法(replace, reload, assign)和修改location属性(href, search)等。

  IE bug:

    以上的1-2类操作引起onbeforeunload的事件,使用起来基本没有任何的问题,可是执行第3类页面条转操作却有点小问题。就是在上图的窗口出现后,如果点选"OK",确实就OK,页面正确跳转了。可是如果这个时候,我们点选"Cancel",却会出现一个脚本异常。解决方法就是把脚本调用try一下!

 

第二、三来源:http://www.asheep.cn/skill/onunload.html;http://www.cnblogs.com/birdshome/archive/2005/09/30/OnBeforeUnload.html

 

posted @ 2016-08-29 13:09  pzfeng  阅读(120)  评论(0)    收藏  举报