Bugün "e.preventDefault () 'da neden" e "gibi harfleri kullanıyoruz?" Hakkında bir yazı yazdım. ve sanırım cevabım biraz mantıklı olacak ...
İlk önce, addEventListener sözdizimini görelim.
Normalde şu olacaktır:
target.addEventListener (tür, dinleyici [, useCapture]);
Ve tanımı addEventListener parametrelerin şunlardır:
tür: Dinlenecek olay türünü temsil eden bir dize.
dinleyici: Belirtilen türde bir olay meydana geldiğinde bir bildirim (Olay arayüzünü uygulayan bir nesne) alan nesne. Bu, EventListener arabirimini uygulayan bir nesne veya bir JavaScript işlevi olmalıdır.
(MDN'den)
Ancak belirtilmesi gereken bir şey olduğunu düşünüyorum:
Dinleyici olarak Javascript işlevini kullandığınızda, Etkinlik arayüzünü (nesne olayı) uygulayan nesne otomatik olarak işlevin "ilk parametresine" atanacaktır. işlev (e), nesne "e" ye atanacaktır çünkü "e" işlevin tek parametresidir (kesinlikle ilki!), ardından bir şeyi önlemek için e.preventDefault'u kullanabilirsiniz ....
aşağıdaki örneği deneyelim:
<p>Please click on the checkbox control.</p>
<form>
<label for="id-checkbox">Checkbox</label>
<input type="checkbox" id="id-checkbox"/>
</div>
</form>
<script>
document.querySelector("#id-checkbox").addEventListener("click", function(e,v){
var v=5;
var t=e+v;
console.log(t);
e.preventDefault();
}, false);
</script>
sonuç: [nesne MouseEvent] 5 olacak ve tıklama olayını engelleyeceksiniz.
ancak yorum işaretini şu şekilde kaldırırsanız:
<script>
document.querySelector("#id-checkbox").addEventListener("click", function(e,v){
var e=3;
var v=5;
var t=e+v;
console.log(t);
e.preventDefault();
}, false);
</script>
şunu alırsınız: 8 ve bir hata : "Yakalanmamış TypeError: e.preventDefault, HTMLInputElement'de bir işlev değildir. (VM409: 69)".
Kesinlikle, tıklama olayı bu sefer engellenmeyecektir. Çünkü işlevde "e" yeniden tanımlanmıştır.
Bununla birlikte, kodu şu şekilde değiştirirseniz:
<script>
document.querySelector("#id-checkbox").addEventListener("click", function(e,v){
var e=3;
var v=5;
var t=e+v;
console.log(t);
event.preventDefault();
}, false);
</script>
her şey tekrar düzgün çalışacak ... 8 alacaksın ve tıklama olayı önlenecek ...
Bu nedenle, "e" işlevinizin yalnızca bir parametresidir ve "olay nesnesini" almak için işlevinizdeki () bir "e" ye ihtiyacınız vardır ve ardından e.preventDefault () işlemini gerçekleştirin. Bu aynı zamanda "e" yi js tarafından ayrılmamış herhangi bir kelimeye değiştirebilmenizin nedenidir.