Saya baru mengenal jQuery, dan sedang membuat panel tab, mengikuti tutorial dalam JavaScript dan jQuery: The Missing Manual , ada baris pertama ketika penulis melakukan ini:
var target = $(this);
Tetapi saya mencoba melakukannya dengan cara itu
var target = evt.target;
dan saya mendapat kesalahan itu:
Uncaught TypeError: Object http://localhost/tabbedPanels/#panel1 has no method 'attr'
Dan ketika saya berubah evt.target
kembali ke $(this)
, itu berfungsi seperti pesona.
Saya ingin tahu apa perbedaan antara $(this)
dan evt.target
?
Ini kode saya jika Anda membutuhkannya:
index.html:
<!DOCTYPE html>
<html>
<head>
<title>Tabbed Panel</title>
<style>
body {
width : 100%;
height: 100%;
}
#wrapper {
margin : auto;
width : 800px;
}
#tabsContainer {
overflow: hidden;
}
#tabs {
padding:0;
margin:0;
}
#tabs li {
float : left;
list-style:none;
}
#tabs a {
text-decoration:none;
padding : 3px 5px;
display : block;
}
#tabs a.active {
background-color : grey;
}
#panelsContainer {
clear: left;
}
#panel1 {
color : blue;
}
#panel2 {
color : yellow;
}
#panel3 {
color: green;
}
#panel4 {
color : black;
}
</style>
<script type="text/javascript" src="jquery-1.8.0.min.js"></script>
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<div id="wrapper">
<div id="tabsContainer">
<ul id="tabs">
<li><a href="#panel1">Panel1</a></li>
<li><a href="#panel2">Panel2</a></li>
<li><a href="#panel3">Panel3</a></li>
<li><a href="#panel4">Panel4</a></li>
</ul>
</div>
<div id="panelsContainer">
<div id="panel1" class="panel">
this is panel1
</div>
<div id="panel2" class="panel">
this is panel2
</div>
<div id="panel3" class="panel">
this is panel3
</div>
<div id="panel4" class="panel">
this is panel4
</div>
</div>
</div>
</body>
</html>
script.js:
$(function(){
$("#tabs a").click(function(evt){
var target = evt.target,
targetPanel = target.attr("href");
$(".panel").hide();
$("#tabs a.active").removeClass("active");
target.addClass("active").blur();
$(targetPanel).fadeIn(300);
evt.preventDefault();
});
$("#tabs a:first").click();
})
javascript-events
this
jquery
Rafael Adel
sumber
sumber
this
adalah referensi ke elemen JavaScript DOM.$()
adalah format yang disediakan oleh jQuery untuk mengubah elemen DOM menjadi Obyek jQuery. menggunakanevt.target
Anda mereferensikan suatu elemen, sedangkan dengan$(this)
Anda mereferensikan objek dengan parameter yang dapat kami akses.$(evt.target)
dan (dalam hal ini) berakhir dengan hasil yang sama juga. The.attr()
Metode disediakan oleh jQuery Obyek, bukan elemen itu sendiriJawaban:
Ada adalah perbedaan antara
$(this)
danevent.target
, dan cukup satu yang signifikan. Sementarathis
(atauevent.currentTarget
, lihat di bawah) selalu merujuk ke elemen DOM yang dilampirkan oleh pendengar,event.target
adalah elemen DOM yang sebenarnya yang diklik. Ingatlah bahwa karena peristiwa menggelegak, jika adadan lampirkan pendengar klik ke div luar
maka
handler
akan dipanggil ketika Anda mengklik di dalam div luar serta yang dalam (kecuali Anda memiliki kode lain yang menangani acara di div dalam dan berhenti propagasi).Dalam contoh ini, ketika Anda mengklik di dalam div bagian dalam, maka di
handler
:this
merujuk pada.outer
elemen DOM (karena itulah objek yang dilampirkan pawang)event.currentTarget
juga merujuk ke.outer
elemen (karena itulah elemen target saat ini yang menangani acara)event.target
merujuk ke.inner
elemen (ini memberi Anda elemen tempat acara berasal)$(this)
Pembungkus jQuery hanya membungkus elemen DOM dalam objek jQuery sehingga Anda dapat memanggil fungsi jQuery di atasnya. Anda dapat melakukan hal yang sama dengannya$(event.target)
.Perhatikan juga bahwa jika Anda mengubah konteks
this
(misalnya jika Anda menggunakan Backbone itu dilakukan secara otomatis), itu akan mengarah ke sesuatu yang lain. Anda selalu dapat memperoleh elemen DOM yang sebenarnyaevent.currentTarget
.sumber
currentTarget
selalu satu dengan pawang, yaitu. yang luarthis
adalah referensi untuk elemen DOM yang menangani acara (target saat ini).event.target
mengacu pada elemen yang memprakarsai acara tersebut. Mereka sama dalam kasus ini, dan sering kali bisa, tetapi tidak selalu demikian.Anda bisa memahami hal ini dengan meninjau dokumen acara jQuery , tetapi secara ringkas:
Untuk mendapatkan fungsionalitas yang diinginkan menggunakan jQuery, Anda harus membungkusnya dalam objek jQuery menggunakan:
$(this)
atau$(evt.target)
.The
.attr()
Metode hanya bekerja pada objek jQuery, bukan pada elemen DOM.$(evt.target).attr('href')
atau hanyaevt.target.href
akan memberi Anda apa yang Anda inginkan.sumber
Ada perbedaan signifikan dalam cara jQuery menangani variabel ini dengan metode "on"
Jika Anda membandingkan ini dengan: -
sumber
http://api.jquery.com/on/ menyatakan:
Jika sudah
Periksa output di bawah ini:
Catatan yang saya gunakan
$
untuk membungkus elemen dom untuk membuat objek jQuery, yang selalu kita lakukan.Anda akan menemukan bahwa untuk kasus pertama,
this
,event.currentTarget
,event.target
semua direferensikan ke elemen yang sama.Sedangkan dalam kasus kedua, ketika acara didelegasikan ke beberapa elemen terbungkus dipicu,
event.target
akan dirujuk ke elemen yang dipicu, sementarathis
danevent.currentTarget
direferensikan ke tempat acara dikirim.Untuk
this
danevent.currentTarget
, semuanya persis sama menurut http://api.jquery.com/event.currenttarget/sumber
Ada masalah lintas browser di sini.
Penangan event non-jQuery biasanya adalah seperti ini:
jQuery menjadi normal
evt
dan membuat target tersedia sepertithis
pada event handler, jadi event handler jQuery biasanya adalah seperti ini:Penangan kejadian hibrid yang menggunakan
evt
target jQuery yang dinormalisasi dan POJS akan menjadi seperti ini:sumber
Dalam fungsi event handler atau metode objek, salah satu cara untuk mengakses properti "elemen yang mengandung" adalah dengan menggunakan kata kunci khusus ini. Kata kunci ini mewakili pemilik fungsi atau metode yang sedang diproses. Begitu:
Untuk fungsi global, ini mewakili jendela.
Untuk metode objek, ini mewakili instance objek.
Dan dalam event handler, ini mewakili elemen yang menerima event.
Sebagai contoh:
Konten jendela peringatan setelah merender html ini masing-masing adalah:
Objek acara dikaitkan dengan semua acara. Ini memiliki properti yang memberikan informasi "tentang acara", seperti lokasi klik mouse di halaman web.
Sebagai contoh:
Konten jendela peringatan setelah merender html ini masing-masing adalah:
sumber