2012-03-30 8 views
7

Tôi dường như không thể tìm thấy một ví dụ về những gì tôi đang cố gắng làm ở đây nhưng tôi chắc chắn rằng nó có thể.Chạy chức năng sau đó theo liên kết

xem xét như sau:

<div id="main_nav"> 
    <a href="/url/">LINK</a> 
    <a href="/url/">LINK</a> 
    <a href="/url/">LINK</a> 
    <a href="/url/">LINK</a> 
</div> 

Làm thế nào tôi có thể chạy một hàm khi một link trong #main_nav được nhấp trước rồi làm theo các link?

Phần bên dưới không hoạt động khi liên kết được theo dõi trước khi chức năng được chạy.

$('#main_nav a').click(function() { 
    // Some Function 
}); 

EDIT

Tôi thực sự cố gắng để xóa một cookie với cookie Plugin JQuery khi các liên kết được nhấp vào. Tôi không chắc liệu điều này có liên quan hay không.

Mã Cookie Rõ ràng là:

$.cookie('TMMenu', null); 

TMMenu là tên chính xác và các plugin được tải.

EDIT

Xin lỗi tất cả mọi người. Vấn đề thực tế là với JQuery Cookie plugin documentation.

$.cookie('TMMenu', null); 

như được mô tả trong readme dường như không hoạt động. Điều này có:

$.cookie('TMMenu', null, { path: '/', expires: -5 }); 
+2

Không có gì sai với là mã này. Nội dung của 'click' sẽ chạy và sau đó liên kết sẽ được theo sau. Bạn đang gặp vấn đề gì? – JaredPar

+0

Có vẻ như bạn cần gọi lại một số loại. – j08691

+2

Bạn đang cố gắng thực hiện hành vi không đồng bộ trước khi liên kết được điều hướng đến, chẳng hạn như hoạt ảnh hoặc yêu cầu AJAX? – zzzzBov

Trả lời

21

Cập nhật: Re chỉnh sửa của bạn: Tôi không thể nhìn thấy bất kỳ lý do đó sẽ không làm việc khác hơn # 1 dưới đây.

tôi có thể nghĩ đến hai câu trả lời cho câu hỏi này:

  1. Bạn đang chạy mã jQuery của bạn trước phần tử #main_nav a tồn tại, và không có xử lý sự kiện được nối. Đặt tập lệnh của bạn ở cuối tệp HTML, ngay trước thẻ đóng </body> hoặc sử dụng ready callback.

  2. Bạn đang làm điều gì đó không đồng bộ trong trình xử lý của mình và không thấy điều đó xảy ra.Đó là bởi vì ngay sau khi trình xử lý sự kiện trả về, liên kết được theo sau   — ngay cả khi trình xử lý của bạn khởi tạo một số hành động không đồng bộ.

Dưới đây là cách khắc phục điều thứ hai (cả hai, nếu bạn đặt này ở cuối hoặc bên trong một handler ready):

$('#main_nav a').click(function(event) { 
    // Remember the link href 
    var href = this.href; 

    // Don't follow the link 
    event.preventDefault(); 

    // Do the async thing 
    startSomeAsyncThing(function() { 
     // This is the completion callback for the asynchronous thing; 
     // go to the link 
     window.location = href; 
    }); 
}); 

(Live copy | source)

+0

Tôi sẽ đánh dấu bạn là chính xác để cung cấp một ví dụ thú vị. Vấn đề là thực sự với mã tôi đang sử dụng để xóa một cookie. Rất cám ơn – Turnip

+0

@ 3rror404: Rất vui khi bạn thấy nó hữu ích! Nhiều như tôi đánh giá cao các đại diện, nó sẽ là tốt hơn nếu bạn đăng câu trả lời của riêng bạn nói rằng nó là gì và sau đó (sau 48 giờ) chấp nhận nó. Tôi sẽ có một upvote nếu bạn chưa có, mặc dù. ;-) (Hoặc bạn có thể gắn cờ câu hỏi của mình, yêu cầu người kiểm duyệt xóa câu hỏi vì nó có thể không hữu ích cho người khác ...) –

+0

@TJCrowder Giải pháp này có hoạt động cho các liên kết đã được nhấp hoặc nhấp chuột phải vào ctrl hay không được mở trong một tab mới? – pdoherty926

2

Đây là cách bạn thực hiện. Nếu bạn gọi event.preventDefault trong trình xử lý cuộc gọi nhấp chuột của bạn, nó sẽ ngăn chặn hành động mặc định. Sau đó, đi theo liên kết qua javascript chỉ cần sử dụng window.open(url) hoặc window.location = url.

$('#main_nav a').click(function(event) { 
    // Some Function 

    var url = $(this).attr('href'); // Get url from the <a> href attribute 
    window.open(url,"_self"); // Open the url in the current window. Set to "_blank" instead of "_self" to open in a new window. 

    event.preventDefault(); // Prevent default action (e.g. following the link) 
    return false; 
}); 

W3Schools có thêm thông tin về sự khác biệt giữa window.openwindow.location.