Heim > Web-Frontend > js-Tutorial > Detaillierte Erläuterung des Unterschieds zwischen Ziel und aktuellem Ziel

Detaillierte Erläuterung des Unterschieds zwischen Ziel und aktuellem Ziel

零下一度
Freigeben: 2017-06-17 17:52:37
Original
2494 Leute haben es durchsucht

25.06.2014

Ich habe heute das JQuery-Handbuch gelesen und festgestellt, dass das Ereignisobjektmodul von JQuery auch ein aktuelles Ziel hat, das immer darauf verweist.

Die Schlussfolgerung lautet also: Das native currentTarget unterscheidet sich völlig vom currentTarget von jQuery. Wir sollten uns auf eine unterschiedliche Behandlung konzentrieren.

2014-6-17

Was ist der Unterschied zwischen Ziel und aktuellem Ziel?

Einfach zu verstehen:

Zum Beispiel gibt es jetzt A und B,

A.addChild(B)

A wartet auf Mausklickereignisse

Wenn dann auf B geklickt wird, ist das Ziel B und das aktuelle Ziel ist A

Das heißt, das aktuelle Ziel ist immer derjenige, der auf das Ereignis hört, und das Ziel ist das Reale Absender des Ereignisses

Zusammenfassung:

Ziel befindet sich in der Zielphase des Ereignisflusses; currentTarget befindet sich in der Erfassungs-, Ziel- und Bubbling-Phase des Ereignisflusses. Nur wenn sich der Ereignisfluss in der Zielphase befindet, sind die beiden Richtungen gleich. Wenn er sich in der Erfassungs- und Blasenphase befindet, zeigt das Ziel auf das angeklickte Objekt und das aktuelle Ziel auf das Objekt der aktuellen Ereignisaktivität (normalerweise das). Elternklasse).

Schlussfolgerung: Aufgrund der Notwendigkeit, mit dem IE-Browser kompatibel zu sein, werden Ereignisse im Allgemeinen in der Bubbling-Phase verarbeitet. Zu diesem Zeitpunkt sind das Ziel und das aktuelle Ziel in einigen Fällen unterschiedlich.

Der erste Platz

function(e){
    var target = e.target || e.srcElement;//兼容ie7,8
    if(target){
        zIndex = $(target).zIndex();
    }
}

//往上追查调用处
enterprise.on(img,'click',enterprise.help.showHelp);
Nach dem Login kopieren

Verwenden Sie $(target).zIndex() unter IE7-8; Sie können

Verwenden Sie $(e unter IE7-8. currentTarget).zIndex(); kann nicht abgerufen werden. Möglicherweise gibt es weder target noch currentTarget unter IE

Testen Sie es (natürlich im IE-Browser)

<input type="button" id="btn1" value="我是按钮" />
<script type="text/javascript"> 
	btn1.attachEvent("onclick",function(e){
		alert(e.currentTarget);//undefined
		alert(e.target);       //undefined
		alert(e.srcElement);   //[object HTMLInputElement]
	});
</script>
Nach dem Login kopieren

Der zweite Platz:

$(element).on('click',jQuery.proxy(this, 'countdownHandler', this.name, this.nameAlert));
function countdownHandler(name, nameAlert){
    var _this = this,
    zIndex = 1999;//获取不到target时的默认值
    if(arguments[2] && arguments[2].currentTarget && $(arguments[2].currentTarget)){
        zIndex = $(arguments[2].currentTarget).zIndex();
        if(zIndex){
            zIndex += 1;
        }else{//获取不到z-index值
            zIndex = 1999;
        }
    }
}
Nach dem Login kopieren

Die Verwendung von $(arguments[2].currentTarget).zIndex(); kann auch

erhalten. Geschätzte Schlussfolgerung: Letzteres ist Bei Verwendung von jquery Um Ereignisse zu binden, lässt jQuery intern currentTarget das aktuelle Element darstellen. Ähnlich wie target unter FF/Chrome und srcElement unter IE.

Online-Beispiele:

    <p id="outer" style="background:#099">  
        click outer  
        <p id="inner" style="background:#9C0">click inner</p>  
        <br>  
    </p>  
      
    <script type="text/javascript">  
    function G(id){  
        return document.getElementById(id);      
    }  
    function addEvent(obj, ev, handler){  
        if(window.attachEvent){  
            obj.attachEvent("on" + ev, handler);  
        }else if(window.addEventListener){   
            obj.addEventListener(ev, handler, false);  
        }  
    }  
    function test(e){  
        alert("e.target.tagName : " + e.target.tagName + "/n e.currentTarget.tagName : " + e.currentTarget.tagName);  
    }  
    var outer = G("outer");  
    var inner = G("inner");  
    //addEvent(inner, "click", test);  // 两者都是P标签
    addEvent(outer, "click", test);  //结论:当在outer上点击时,e.target与e.currentTarget是一样的,都是p;当在inner上点击时,e.target是p,而e.currentTarget则是p。
    </script>
Nach dem Login kopieren

Objekte this, currentTarget und target

in Innerhalb Im Ereignisverarbeitungsprogramm entspricht das Objekt this immer dem Wert von currentTarget, während target nur das tatsächliche Ziel des Ereignisses enthält. Wenn der Event-Handler direkt dem Zielelement zugewiesen ist, enthalten this, currentTarget und target dieselben Werte. Schauen Sie sich das folgende Beispiel an:

var btn = document.getElementById("myBtn");
btn.onclick = function (event) {
    alert(event.currentTarget === this); //ture
    alert(event.target === this); //ture
};
Nach dem Login kopieren

Dieses Beispiel erkennt die Werte von currentTarget, target und this. Da das Ziel des Klickereignisses die Schaltfläche ist, sind diese drei Werte gleichzeitig gleich. Wenn der Ereignishandler im übergeordneten Knoten der Schaltfläche vorhanden ist, sind diese Werte nicht identisch. Schauen Sie sich das folgende Beispiel noch einmal an:

document.body.onclick = function (event) {
    alert(event.currentTarget === document.body); //ture
    alert(this === document.body); //ture
    alert(event.target === document.getElementById("myBtn")); //ture
};
Nach dem Login kopieren

Wenn auf die Schaltfläche in diesem Beispiel geklickt wird, sind sowohl this als auch currentTarget gleich document.body, da der Ereignishandler für dieses Element registriert ist. Das Zielelement entspricht jedoch dem Schaltflächenelement und geht davon aus, dass es das eigentliche Ziel des Klickereignisses ist. Da für die Schaltfläche kein Ereignishandler registriert ist, wird das Klickereignis nach document.body weitergeleitet, wo das Ereignis verarbeitet wird.

Wenn Sie mehrere Ereignisse über eine Funktion verarbeiten müssen, können Sie das Typattribut verwenden. Zum Beispiel:

var btn = document.getElementById("myBtn");
var handler = function (event) {
        switch (event.type) {
        case "click":
            alert("Clicked");
            break;
        case "mouseover":
            event.target.style.backgroundColor = "red";
            bread;
        case "mouseout":
            event.target.style.backgroundColor = "";
            break;
        }
    };
btn.onclick = handler;
btn.onmouseover = handler;
btn.onmouseout = handler;
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Unterschieds zwischen Ziel und aktuellem Ziel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage