羊皮纸 服务
       
       
      分享
       
      原创部落格 /

      JScript 事件的共用

      上一篇
      下一篇
      本文
      JScript 事件的共用
      今天在增加网页功能时,遇到了一个大问题∶那就是当某些元件使用同一个事件时,若使用指定函数内容的方式来运作时,後者指定的函数会把前者函数覆写,所以前者就会失效啦!

      这个问题第一个让我想到的是∶

      addEventListener('click',function(){});

      这个函数,说实在!我几乎没有用过这个函数,应该是说,没用到!哈哈!以前常常会想著像这样∶

      object.onclick=function(){};

      指定函数就好了,这一刻才了解addEventListener 这种函数存在的道理,把新函数累加到旧函数里去。

      於是我很热血的查了一下addEventListener 的用法,发现不是每个浏览器都支援,於是又找到一个增加对於addEventListener 的支援的过载函数。

      增加对於addEventListener 的支援
      1. if (!Element.prototype.addEventListener) {
      2. var oListeners = {};
      3. function runListeners(oEvent) {
      4. if (!oEvent) { oEvent = window.event; }
      5. for (var iLstId = 0, iElId = 0, oEvtListeners = oListeners[oEvent.type]; iElId < oEvtListeners.aEls.length; iElId++) {
      6. if (oEvtListeners.aEls[iElId] === this) {
      7. for (iLstId; iLstId < oEvtListeners.aEvts[iElId].length; iLstId++) { oEvtListeners.aEvts[iElId][iLstId].call(this, oEvent); }
      8. break;
      9. }
      10. }
      11. }
      12. Element.prototype.addEventListener = function (sEventType, fListener /*, useCapture (will be ignored!) */) {
      13. if (oListeners.hasOwnProperty(sEventType)) {
      14. var oEvtListeners = oListeners[sEventType];
      15. for (var nElIdx = -1, iElId = 0; iElId < oEvtListeners.aEls.length; iElId++) {
      16. if (oEvtListeners.aEls[iElId] === this) { nElIdx = iElId; break; }
      17. }
      18. if (nElIdx === -1) {
      19. oEvtListeners.aEls.push(this);
      20. oEvtListeners.aEvts.push([fListener]);
      21. this["on" + sEventType] = runListeners;
      22. } else {
      23. var aElListeners = oEvtListeners.aEvts[nElIdx];
      24. if (this["on" + sEventType] !== runListeners) {
      25. aElListeners.splice(0);
      26. this["on" + sEventType] = runListeners;
      27. }
      28. for (var iLstId = 0; iLstId < aElListeners.length; iLstId++) {
      29. if (aElListeners[iLstId] === fListener) { return; }
      30. }
      31. aElListeners.push(fListener);
      32. }
      33. } else {
      34. oListeners[sEventType] = { aEls: [this], aEvts: [ [fListener] ] };
      35. this["on" + sEventType] = runListeners;
      36. }
      37. };
      38. Element.prototype.removeEventListener = function (sEventType, fListener /*, useCapture (will be ignored!) */) {
      39. if (!oListeners.hasOwnProperty(sEventType)) { return; }
      40. var oEvtListeners = oListeners[sEventType];
      41. for (var nElIdx = -1, iElId = 0; iElId < oEvtListeners.aEls.length; iElId++) {
      42. if (oEvtListeners.aEls[iElId] === this) { nElIdx = iElId; break; }
      43. }
      44. if (nElIdx === -1) { return; }
      45. for (var iLstId = 0, aElListeners = oEvtListeners.aEvts[nElIdx]; iLstId < aElListeners.length; iLstId++) {
      46. if (aElListeners[iLstId] === fListener) { aElListeners.splice(iLstId, 1); }
      47. }
      48. };
      49. }

      想说这一下好了,问题解决了!NO....

      window.resize 这个事件没法动呀!整个就是作白工!所以整个就是很火大!害我花了那麽多时间...

      最後鱼恋用了自己想到的办法∶

      jaby_eventListener
      1. /* 作者∶鱼恋秋波 http://neil.heyxu.com */
      2. function jaby_eventListener(tar,icode){
      3. eval('var a = String('+tar+'?'+tar+':\'function(){}\')');
      4. var p1 = a.indexOf('{');
      5. var p2 = a.indexOf('}',-1);
      6. a = a.substring(p1+1,p2);
      7. var func = 'function(){ '+a+icode+'};';
      8. eval(tar+'='+func);
      9. }

      简简单单解决了困扰的问题~

      • 本文为原创文章, 为尊重著作权, 未经作者同意请勿任意转载
      • 关键字 : iElId(16), oEvtListeners(15), iLstId(14), sEventType(11), aElListeners(9), nElIdx(8), function(8), oListeners(7), fListener(7), length(6), aEvts(6), runListeners(5), oEvent(5), return(3), prototype(3), break(3), Element(3), 整个就(2), 想到(2), window(2)
      0 0
      2011-10-10T18:15:00+0000

      发表回响
       
      验证字串

      Facebook 粉丝专页

      部落格目录

      • 魚戀秋波 Neil Y.K.的部落格
        • 心情·日记
        • 创作
          • 绘图
          • 摄影
          • 素描
          • 水草情迷
          • 舞动程序
            • 关键词库系统搜寻及应用设计
            • 键盘测试工具
            • 宅配物流系统
            • 中文判定及转换程式
            • 图片裁切控制介面 ScaleFrame
            • 线上名片设计程式
            • 让列表像瀑布一样的 Puzzle 模组
            • 商品特徵设定程式
            • 网路履历程式
            • 整合搜寻模组
            • 全球地理管理工具
            • 传说中 IE 消失的文字
            • 全球化地理系统
            • 网页轮播模组
            • 黑族塔罗牌阵程式
            • 英文地址转换程式英文地址转换程式
            • 黑族纸娃娃系统黑族纸娃娃系统
            • 索引地图建立工具
            • 推荐好用的文字编辑器
            • JScript 事件的共用
            • 设定 PHP 档案上传容量限制
            • 许久不见的侦错模式
            • 解决 Flash 无法在原网页开启连结
            • 雷达图产生程式
            • 相片杂凑工具
            • Facebook 网站应用
            • 自创的防木马登入网页
          • 文学
        • 我的工作
        • 杂七杂八DIY
        • 流浪札记
        • 玩乐情报
        • 生活话题
        • 经方中医
        • 未分类

      部落格列表

      QRCode 条码 & APP 连结

      说明
      本页网址

      在相关服务标签中,『扫描条码,在行动装置』或是『点击连结按钮,在本装置』中开启网页或是 APP 相关操作。
      QRCode

      访客浏览统计

      • 访客人数 : 8,368,935
      • 浏览次数 : 8,553,638
      • 浏览深度 : 102.2 %