2009-04-25 43 views
10

Tôi có thể đang làm điều gì đó ngu ngốc. Nhưng nếu tôi có một liên kết bình thường như:Làm cách nào để chặn liên kết với jQuery khi sử dụng cuộc gọi ajax?

<div id="changeMe"></div> 
<a href="/Not/Intercepted" id="interceptMe">A link</a> 

và tôi đính kèm một sự kiện click jQuery để liên kết như sau:

$('#interceptMe').click(function() { 
    $('#changeMe').text('Changed'); 
    return false; 
}); 

Mọi thứ hoạt động peachy. Trang không phải được chuyển hướng đến/Không/bị chặn, đó là những gì tôi nghĩ là đúng.

Bây giờ ...

tôi Giới thiệu bạn một cuộc gọi ajax như $ .get đến sự kiện click của tôi và bây giờ trang của tôi sẽ được chuyển hướng không chính xác để trang, trong đó chủ yếu ghi đè các cuộc gọi ajax.

$('#interceptMe').click(function() { 
    $.get('/Ajax/Call', goesIn, function(comesOut) { 
    $('#changeMe').html(comesOut); 
    }, "html"); 
    return false; 
}); 

Có cách nào để làm cho jQuery hoặc javascript vẫn chặn liên kết nhấp để nó không chuyển đến trang href? Tôi muốn giữ href cho những người dùng không bật javascript. TIA!

+3

Bạn có chắc chắn rằng không hoạt động? Bởi vì nó có vẻ ổn với tôi (tức là nó không nên chuyển hướng). – cletus

+0

Đó là những gì tôi đang nghĩ. Nó có vẻ đúng với tôi quá, vì vậy không chắc chắn những gì đang xảy ra. – rball

+0

Bây giờ nó đang hoạt động. Lỗi của tôi! – rball

Trả lời

22

thay vì trở lại sai, sử dụng ....

$("#interceptMe").click(function(event){ 

    event.preventDefault(); 

    // Ajax here 

    return false; //for good measure 
}); 

http://docs.jquery.com/Events/jQuery.Event#event.preventDefault.28.29

Tôi đã có nhiều vấn đề với IE đặc biệt không nghe trả về false. Dường như có người khác http://coffeeandpaste.blogspot.com/2009/02/javascript-onclick-return-false-does.html

+0

@rball 'return false' nên thực hiện cùng một điều mặc dù. Tôi chưa bao giờ gặp vấn đề này trước đây trong 3,5 năm sử dụng jQuery. Nếu 'event.preventDefault' hoạt động và 'return false' thì không, vui lòng cho tôi biết. – KyleFarris

+1

Sẽ làm, cảm ơn phản hồi. Tôi cũng nghĩ rằng đó là kỳ quặc, nhưng nó xảy ra trên tất cả mọi thứ tôi có một cuộc gọi ajax. – rball

+0

@KyleFarris Tôi gặp nhiều vấn đề với trình duyệt không hoạt động với trả về false. preventDefault() hoạt động cho đến nay 100% vì vậy tôi đã chuyển sang nó để có mã đáng tin cậy hơn. Tôi đã cập nhật câu trả lời của mình bằng một liên kết đến những người khác có cùng vấn đề. –

Các vấn đề liên quan