2009-06-30 34 views
16

jQuery hyperlinks - href value? văn bản] [1]jquery nhấp vào lực lượng neo phần tử di chuyển lên đầu trang?

Tôi đang gặp sự cố khi sử dụng jquery và sự kiện nhấp được đính kèm với phần tử neo. [1]: jQuery hyperlinks - href value? Câu hỏi "SO" này có vẻ là một bản sao và câu trả lời được chấp nhận dường như không giải quyết được sự cố. Xin lỗi nếu điều này là xấu SO nghi thức.

Trong chức năng của tôi đã sẵn sàng() Tôi có:

jQuery("#id_of_anchor").click(function(event) { //start function when any update link is clicked 
     Function_that_does_ajax(); 
     }); 

và neo của tôi trông như thế này:

<a href="#" id="id_of_anchor"> link text </a> 

nhưng khi liên kết được nhấp, hàm ajax được thực hiện như mong muốn, nhưng trình duyệt cuộn lên đầu trang. không tốt.

Tôi đã thử thêm:

event.preventDefault(); 

trước khi gọi chức năng của tôi mà không được ajax, nhưng điều đó không giúp đỡ. Tôi đang thiếu gì?

Làm rõ

Tôi đã sử dụng tất cả các kết hợp của

return false; 
event.preventDefault(); 
event.stopPropagation(); 

trước và sau cuộc gọi của tôi để js của tôi chức năng ajax. Nó vẫn cuộn đến đỉnh.

+0

Có thể xem trang thực tế không? Tôi có thể roi lên một ví dụ về nó hoạt động trong 2 phút, nhưng tôi không chắc liệu điều đó có giúp ích cho bạn hay không - bạn đã thử điều đó chưa? Loại bỏ các yếu tố xung quanh cho đến khi nó hoạt động? –

Trả lời

17

Điều đó sẽ hiệu quả, bạn có thể làm rõ ý của mình trước "trước" không? Có phải bạn đang làm thứ này?

jQuery("#id_of_anchor").click(function(event) { 
    event.preventDefault(); 
    Function_that_does_ajax(); 
}); 

Vì rằng nên làm việc theo nghĩa là nếu nó không làm việc bạn đang làm điều gì đó sai và chúng tôi cần phải xem mã nhiều hơn nữa. Tuy nhiên, vì lợi ích của sự hoàn chỉnh, bạn cũng có thể thử điều này:

jQuery("#id_of_anchor").click(function() { 
    Function_that_does_ajax(); 
    return false; 
}); 

EDIT

Here is an example of this working.

Hai liên kết sử dụng mã này:

$('#test').click(function(event) { 
    event.preventDefault(); 
    $(this).html('and I didnt scroll to the top!'); 
}); 

$('#test2').click(function(event) { 
    $(this).html('and I didnt scroll to the top!'); 
    return false; 
}); 

Và như bạn có thể thấy họ đang làm việc tốt.

+0

Tôi đã thêm chi tiết hơn vào câu hỏi của mình và hoàn toàn không nghi ngờ tôi đang làm điều gì sai, bạn muốn xem mã nào? –

+0

Aha! nếu bạn sử dụng return false, bạn không thể có tham số sự kiện. Vì vậy, tôi đã có nó làm việc, nhưng tôi vẫn muốn biết tại sao event.preventDefault() không hoạt động. –

+0

thông số sự kiện không phải là vấn đề, hãy xem trang mẫu mà tôi vừa mới đưa lên. Nó hoạt động cho tôi tốt trên ff, ie6, ie7 –

2
$("#id_of_anchor").click(function(event) { 
    // ... 
    return false; 
} 
3

Câu hỏi này là một bài tập gỡ lỗi vì nó đã tuyên bố rằng bạn đang sử dụng các chức năng chính xác từ jQuery Event object.

Trong một xử lý sự kiện jQuery, bạn có thể làm một trong hai, hoặc cả hai, trong hai điều cơ bản:

1. Ngăn chặn hành vi mặc định của phần tử (a href = "#", trong trường hợp của bạn) :

jQuery("#id_of_anchor").click(function(evt) { 
    // ... 
    evt.preventDefault(); // assuming your handler has "evt" as the first parameter 
    return false; 
} 

2. Dừng sự kiện từ tuyên truyền để xử lý sự kiện trên các yếu tố HTML xung quanh:

jQuery("#id_of_anchor").click(function(evt) { 
    // ... 
    evt.stopPropagation(); // assuming your handler has "evt" as the first parameter 
} 

Vì bạn đang không nhận được hành vi mong đợi, bạn nên đưa ra các cuộc gọi ajax tạm thời, thay thế nó bằng một số mã vô thưởng vô phạt như thiết lập một giá trị biểu mẫu, hoặc cảnh báo -shudder- ("OK") và kiểm tra xem bạn có còn cuộn lên đầu hay không.

5

bạn có thể sử dụng javascript: void (0); tài sản href.

0

Tôi đã gặp sự cố tương tự.

Tôi nghĩ điều đó xảy ra khi bạn ràng buộc sự kiện trước khi thêm phần tử vào DOM.

5

Như Tilal nói ở trên:

<a id="id_of_anchor" href="javascript:void(0)" /> 

giữ thẻ neo nhìn thẳng, cho phép bạn gán bộ xử lý nhấp chuột vào nó với javascript, và không di chuyển. Chúng tôi sử dụng nó rộng rãi chỉ vì lý do này.

0

Nó đã giúp tôi rất nhiều với mã bên dưới. Cảm ơn bạn!

 $(document).ready(function() { 
     $(".dropdown dt a").click(function(event) { 
     event.preventDefault(); 
      $(".dropdown dd ul").toggle('slow'); 
     });   
     $(".dropdown dd ul li a").click(function(event) { 
     event.preventDefault(); 
      $(".dropdown dd ul").hide(); 
     }); 
    }); 
1

chỉ mất

href="#" 

Trong thẻ một html ... đó là những gì làm cho trang web để "nhảy lên".

<a id="id_of_anchor"> link text </a> 

và nhớ thêm

cursor: pointer; 

đến của một bạn css vì vậy nó sẽ trông giống như một liên kết trên mouseover.

Chúc may mắn.

+0

Không thực sự đề nghị cách để loại bỏ href thuộc tính, nhưng sau khi tôi kiểm tra nó với HTML validator, nó đáng ngạc nhiên thông qua các bài kiểm tra Vì vậy, tôi upvote này quá – Melvin

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