TNT blog  
          日歷
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345
          統計
          • 隨筆 - 5
          • 文章 - 40
          • 評論 - 7
          • 引用 - 0

          導航

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          home

          搜索

          •  

          最新隨筆

          最新評論

          閱讀排行榜

           

          Dojo學習筆記(8. dojo.event & dojo.event.topic & dojo.event.browser)

          Dojo學習筆記(8. dojo.event & dojo.event.topic & dojo.event.browser)

          模塊:dojo.event

          終于進入有名的dojo事件處理系統的學習了,學習前建議讀者先去補習一下AOP的相關知識

          dojo.event.connect

          綁定指定的方法到指定的對象的方法上

          Usage Example:

          簡單綁定1

          function doOnClick1()
          {
           alert("Clicked!");
          }
          dojo.event.connect(dojo.byId("inputTest"),"onclick","doOnClick1");

          簡單綁定2

          obj = { doOnClick2: function(){ alert("Clicked!");}}
          dojo.event.connect(dojo.byId("inputTest"),"onclick",obj,"doOnClick2");

          如果存在需要進行多個事件的綁定的時候,你就會看到dojo的方便之處了

          obj2 = { doOnClick2: function(){alert("Clicked!");}}
          dojo.event.connect(dojo.byId("inputTest"),"onclick",obj,"doOnClick2");
          dojo.event.connect(dojo.byId("inputTest"),"onclick",obj2,"doOnClick2");

          connect可以對任何對象的方法進行綁定,而不是只能針對DOM對象

          dojo.event.connect(obj,"doOnclick2","doOnClick1"); //在調用obj.doOnclick2()后調用doOnClick1()


          dojo.event.connectBefore

          dojo.event.connect默認是后綁定,connectBefore則是早綁定,綁定的方法將在指定方法前執行,用法與connect一致


          dojo.event.connectAround

          Usage Example:

          function aroundTest(invocation){
            //此處可以增加代碼,比如檢查參數(invocation.args)
            var result = invocation.proceed();
            //此處可以增加代碼,比如修改結果(result)
            return result;
          }
          dojo.event.connectAround(dojo.byId("inputTest"),"onclick","aroundTest");


          dojo.event.connectOnce
          說起這個函數,還真的是讓我想了半天,直覺上我就把它想象成executeOnce,結果測試的結果讓我差點想不通
          connectOnce就是指保證只綁定一次,來避免重復綁定會導致的重復執行的問題


          dojo.event.disconnect

          解除綁定,調用參數與connect一致,即可解除之前的綁定操作


          dojo.event.log

          在執行指定對象的指定方法后自動記錄日志

          Usage Example:

          dojo.event.log(obj, "doOnClick"); //當調用obj.doOnClick時記錄下日志"DEBUG:  ([object Object]).doOnClick : "

          你也可以這樣寫:

          dojo.event.log({srcObj: obj, srcFunc: "doOnClick"});


          dojo.event.kwConnect

          kwConnect可以做到更加靈活的綁定,比如可以設置延遲執行綁定

          Usage Example:

          dojo.event.kwConnect({
            srcObj: dojo.byId("inputTest"),
            srcFunc: "onclick",
            adviceObj: obj,
            adviceFunc: "doOnclick2",

            type: "before", //默認為"after",可選: "before", "around",注意:type是用來決定adviceFunc的行為的,如果為"around",則aroundFunc將失效
            aroundObj: null,
            aroundFunc: null, //如果指定了aroundFunc,則其將對adviceFunc進行攔截,但是當type為"around"時,則aroundFunc將不會執行
            once: false, //默認為false,允許重復綁定
            delay: 3000, //延時3秒后執行adviceFunc
            rate: 0, //這個從源代碼沒有看懂起什么作用
            adviceMsg: false //這個從源代碼沒有看懂起什么作用
          });


          dojo.event.kwDisconnect

          用來解除使用kwConnect指定的綁定


          模塊:dojo.event.topic

          Topic機制與Advice機制都能夠實現事件的綁定,但是顯然,Topic更適合處理多重綁定。
          發布主題,然后由用戶訂閱的機制就是一個典型的觀察者模式

          dojo.event.topic.registerPublisher

          注冊主題發布器

          Usage Example:

          dojo.event.topic.registerPublisher("myTopic", obj, "doOnClick2");


          dojo.event.topic.subscribe

          訂閱主題

          Usage Example:

          dojo.event.topic.subscribe("myTopic", "test"); //執行obj.doOnClick2()以后會自動執行test()


          dojo.event.topic.unsubscribe

          取消訂閱主題

          Usage Example:

          dojo.event.topic.unsubscribe("myTopic", "test");


          dojo.event.topic.destroy

          刪除主題,此主題所有的訂閱都將失效

          Usage Example:

          dojo.event.topic.destroy("myTopic");


          模塊:dojo.event.browser

          dojo.event.browser.addListener

          增加監聽器

          Usage Example:

          function listener()
          {
            alert("ok");
          }
          dojo.event.browser.addListener(document, 'mousedown', listener); //事件名稱可以加上"on",也可以沒有"on"
          dojo.event.browser.addListener(document, 'onmousedown', listener, true); //capture為真表示不受上層元素的事件控制


          dojo.event.browser.removeListener

          清除監聽器(這個方法似乎是無效的)


          dojo.event.browser.callListener

          調用監聽器

          Usage Example:

          dojo.event.browser.callListener(listener, document);


          dojo.event.browser.stopPropagation

          阻止Event傳播

          Usage Example:

          dojo.event.browser.stopPropagation();


          dojo.event.browser.preventDefault

          將當前事件的返回值設置為false

          Usage Example:

          dojo.event.browser.preventDefault();


          dojo.event.browser.keys

          鍵定義:
            KEY_BACKSPACE: 8,
            KEY_TAB: 9,
            KEY_ENTER: 13,
            KEY_SHIFT: 16,
            KEY_CTRL: 17,
            KEY_ALT: 18,
            KEY_PAUSE: 19,
            KEY_CAPS_LOCK: 20,
            KEY_ESCAPE: 27,
            KEY_SPACE: 32,
            KEY_PAGE_UP: 33,
            KEY_PAGE_DOWN: 34,
            KEY_END: 35,
            KEY_HOME: 36,
            KEY_LEFT_ARROW: 37,
            KEY_UP_ARROW: 38,
            KEY_RIGHT_ARROW: 39,
            KEY_DOWN_ARROW: 40,
            KEY_INSERT: 45,
            KEY_DELETE: 46,
            KEY_LEFT_WINDOW: 91,
            KEY_RIGHT_WINDOW: 92,
            KEY_SELECT: 93,
            KEY_F1: 112,
            KEY_F2: 113,
            KEY_F3: 114,
            KEY_F4: 115,
            KEY_F5: 116,
            KEY_F6: 117,
            KEY_F7: 118,
            KEY_F8: 119,
            KEY_F9: 120,
            KEY_F10: 121,
            KEY_F11: 122,
            KEY_F12: 123,
            KEY_NUM_LOCK: 144,
            KEY_SCROLL_LOCK: 145


          dojo.event.browser.currentEvent

          最近一次的Event,其屬性包括:

          altKey  //檢查alt鍵的狀態,當alt鍵按下時,值為 true
          button  //檢查按下的鼠標鍵,0 沒按鍵,1 按左鍵,2 按右鍵,3 按左右鍵,4 按中間鍵,5 按左鍵和中間鍵,6 按右鍵和中間鍵,7 按所有的鍵
            //這個屬性僅用于onmousedown, onmouseup, 和 onmousemove 事件。對其他事件,不管鼠標狀態如何,都返回 0(比如onclick)
          clientX  //返回鼠標在窗口客戶區域中的X坐標
          clientY  //返回鼠標在窗口客戶區域中的Y坐標
          ctrlKey  //檢查ctrl鍵的狀態,當ctrl鍵按下時,值為 true
          fromElement //檢測 onmouseover 和 onmouseout 事件發生時,鼠標所離開的元素
          keyCode  //檢測鍵盤事件相對應的內碼,僅當type為keydown,keyup,keypress時才有效
          offsetX  //檢查相對于觸發事件的對象,鼠標位置的水平坐標
          offsetY  //檢查相對于觸發事件的對象,鼠標位置的垂直坐標
          propertyName //設置或返回元素的變化了的屬性的名稱,你可以通過使用 onpropertychange 事件,得到 propertyName 的值
          screenX  //檢測鼠標相對于用戶屏幕的水平位置
          screenY  //檢測鼠標相對于用戶屏幕的垂直位置
          shiftKey //檢查shift鍵的狀態,當shift鍵按下時,值為true
          srcElement //返回觸發事件的元素
          srcFilter //返回觸發 onfilterchange 事件的濾鏡
          toElement //檢測 onmouseover 和 onmouseout 事件發生時,鼠標所進入的元素
          type  //返回沒有“on”作為前綴的事件名,比如click, mousedown
          x  //返回鼠標相對于css屬性中有position屬性的上級元素的x軸坐標。如果沒有css屬性中有position屬性的上級元素,默認以BODY元素作為參考對象
          y  //返回鼠標相對于css屬性中有position屬性的上級元素的y軸坐標。如果沒有css屬性中有position屬性的上級元素,默認以BODY元素作為參考對象
          target  //同srcElement
          currentTarget
          layerX  //同offsetX
          layerY  //同offsetY
          pageX  //無水平滾動條的情況下與clientX同
          pageY  //無水平滾動條的情況下與clientY同
          relatedTarget // 僅當type為mouseover,mouseout時才有效
          keys  //與dojo.event.browser.keys相同,僅當type為keydown,keyup,keypress時才有效
          charCode //鍵值,僅當type為keypress時才有效


          dojo.event.browser.isEvent

          判斷指定對象是否為event對象

          Usage Example:

          dojo.event.browser.isEvent(dojo.event.browser.currentEvent); //當dojo.event.browser.currentEvent不為null時返回true

          posted on 2007-05-25 14:06 TNT 閱讀(224) 評論(0)  編輯  收藏 所屬分類: ajax
           
          Copyright © TNT Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 阿巴嘎旗| 出国| 如东县| 望奎县| 阿巴嘎旗| 武川县| 和平县| 葵青区| 罗田县| 晋宁县| 平定县| 肥东县| 即墨市| 乌鲁木齐市| 霍林郭勒市| 邯郸市| 尼勒克县| 赞皇县| 图们市| 庆元县| 西乌| 长沙县| 和龙市| 泸西县| 射阳县| 开鲁县| 奇台县| 滨州市| 武邑县| 鄄城县| 塘沽区| 象州县| 新巴尔虎右旗| 新疆| 工布江达县| 贞丰县| 连州市| 衡阳县| 来宾市| 洛南县| 华池县|