JavaScriptノート(十)をよく勉強してください.IEとDOMイベント関数の違いです.
13589 ワード
1、取得対象がイベントセンターにあるオブジェクトをターゲットとしています.<div/>要素割り当てOclickイベント処理関数、clickイベントをトリガした場合、<div/>がターゲットとされています.IE、ターゲットは、イベントオブジェクトのsrcele ment属性に含まれる:
- var oTarget = oEvent.srcElement;
DOM対応のブラウザには、ターゲットがtarget属性に含まれています.
- var oTarget = oEvent.target;
例:
- <div id="divId" onclick="testFunction(event)"> </div>
- <script type="text/javascript" >
- var sUserAgent = navigator.userAgent;
- var isIE = sUserAgent.indexOf("compatible") > -1 && sUserAgent.indexOf("MSIE") > -1;
- var isMoz = sUserAgent.indexOf("Gecko") > -1;
- function testFunction(oEvent){
- if(isIE){
- alert("IE");
- var oEvent = window.event;
- //IE、 event srcElement :
- var oTarget = oEvent.srcElement;
- alert(oTarget.innerText);
- return;
- }
- if(isMoz){
- alert(" : "+oEvent);
- /**
- *
- * innerText 、 innerHTML
- * innerText .
- *
- * innerText**/
- HTMLElement.prototype.__defineGetter__("innerText",
- function ()
- {
- var anyString = "";
- var childS = this.childNodes;
- for (var i = 0; i < childS.length; i++)
- {
- if (childS[i].nodeType == 1)
- anyString += childS[i].tagName == "BR"
- ? "\r
" : childS[i].textContent;
- else if (childS[i].nodeType == 3)
- anyString += childS[i].nodeValue;
- }
- return anyString;
- });
- HTMLElement.prototype.__defineSetter__("innerText",
- function (sText)
- {
- this.textContent = sText;
- });
- /**end**/
- // DOM 、 target :
- var oTarget = oEvent.target;
- alert(oTarget.innerText);
- return;
- }
- }
-
- </script>
2、あるイベントを阻止するデフォルト行動IEは、リターンValue属性をfalseに設定しなければならない.
- oEvent.returnValue = false;
Mozillaでは、preventDefault()メソッドを呼び出す限り:
- oEvent.preventDefault();
ユーザがページを右クリックすると、彼がメニューを使うのを阻止します.contextmenuイベントのデフォルトを阻止すればいいです.
- doucment.body.oncontextmenu = function (oEvent){
- if(isIE){
- oEvent = window.event;
- oEvent.returnValue = false;
- }else{
- oEvent.preventDefault();
- }
- };
3、イベントコピーの停止(発泡) IEでは、イベントのさらなる泡立ちを防ぐために、cancel Bbble属性をtrueに設定しなければならない:
- oEvent.cancelBubble = true;
Mozillaでは、stopPropagation()メソッドを呼び出すだけです.
- oEvent.stopPropagation();
イベントコピーを停止すると、イベントフローの他のオブジェクトのイベント処理関数の実行を阻止できます.以下のbuttonボタンをクリックするとinput、bodyがポップアップします.
- <html onclick="alert('html');">
- <head>
- <title> ( )</title>
- </head>
- <body onclick="alert('body');">
- <input type="button" onclick="alert('input');" value=" " />
- </body>
- </html>
以下はボタンでコピーを停止します.
- <html onclick="alert('html');">
- <head>
- <title> ( )</title>
- <script type="text/javascript">
- var sUserAgent = navigator.userAgent;
- var isIE = sUserAgent.indexOf("compatible") > -1 && sUserAgent.indexOf("MSIE") > -1;
- function testClick(oEvent){
- alert("input");
- if(isIE){
- var oEvent = window.event;
- oEvent.cancelBubble = true;
- }else{
- oEvent.stopPropagation();
- }
- }
- </script>
- </head>
- <body onclick="alert('body');">
- <input type="button" onclick="testClick(event);" value=" " />
- <br />
- </body>
- </html>