วิธีหยุดพฤติกรรมการคลิกลิงก์เริ่มต้นด้วย jQuery


89

ฉันมีลิงค์บนหน้าเว็บ เมื่อผู้ใช้คลิกวิดเจ็ตบนเพจควรอัปเดต อย่างไรก็ตามฉันกำลังทำบางอย่างเนื่องจากฟังก์ชันการทำงานเริ่มต้น (การนำทางไปยังหน้าอื่น) เกิดขึ้นก่อนที่เหตุการณ์จะเริ่มขึ้น

นี่คือลักษณะของลิงค์:

<a href="store/cart/" class="update-cart">Update Cart</a>

นี่คือลักษณะของ jQuery:

$('.update-cart').click(function(e) { 
  e.stopPropagation(); 
  updateCartWidget(); 
});

อะไรคือปัญหา?


คำตอบ:



36
$('.update-cart').click(function(e) {
    updateCartWidget();
    e.stopPropagation();
    e.preventDefault();
});

$('.update-cart').click(function() {
    updateCartWidget();
    return false;
});

วิธีการต่อไปนี้บรรลุสิ่งเดียวกันแน่นอน


ทำไมต้องโทรstopPropagation()และpreventDefault()?
smartcaveman

2
ดูที่คำตอบของ Jonathons เขาอธิบายว่าแต่ละฟังก์ชันทำหน้าที่อะไร แต่โดยพื้นฐานแล้วเพื่อให้แน่ใจว่าคลิกที่คุณเพิ่งจัดการจะไม่ได้รับการจัดการโดยคนอื่นในภายหลัง
Peeter

30

คุณต้องการe.preventDefault()ป้องกันไม่ให้ฟังก์ชันเริ่มต้นเกิดขึ้น

หรือได้return falseจากวิธีการของคุณ.

preventDefaultป้องกันฟังก์ชันการทำงานเริ่มต้นและstopPropagationป้องกันไม่ให้เหตุการณ์เดือดจนองค์ประกอบคอนเทนเนอร์



1

รหัสนี้ตัดผู้ฟังเหตุการณ์ทั้งหมด

var old_element=document.getElementsByClassName(".update-cart");    
var new_element = old_element.cloneNode(true);
old_element.parentNode.replaceChild(new_element, old_element);  
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.