2010-08-17 44 views
11

Tôi có một trang có giao diện tab. Mỗi tab có một id duy nhất. Tôi đã bật các liên kết trỏ đến trang đó với id được nối sau băm và tôi hiện đang cố gắng phá vỡ hành vi trình duyệt mặc định mở URL có hàm băm tại vị trí của phần tử trên trang.Ngăn chặn hành vi băm mặc định khi tải trang

Vì vậy:

  • liên kết trangA để TrangB như thế này: <a href="pageB.php#Tab4">Go</a>
  • trangB mở ra, và jQuery tôi kích hoạt tab đúng, nhưng trình duyệt đã cuộn xuống đến nơi <div id="Tab4"> nằm trên trang.

Đó chính xác là những gì tôi muốn ngăn chặn.

Bất kỳ ý tưởng nào? Cảm ơn!

Trả lời

43

Không có cách nào để ngăn chặn hành vi băm mặc định, nhưng bạn có thể thay đổi lược đồ băm để #tag không tương ứng với bất kỳ ID nào trên trang của bạn. Khi tải trang, hãy lấy giá trị băm và nối thêm một hằng số (ví dụ: _hash), sau đó cuộn đến đó bằng cách sử dụng jQuery.

Ví dụ: http://mysite/page.php#tab4

page.php có <div id="tab4_hash"></div>

Ngày tải trang, có được bằng cách thực hiện div tab4 + _hash

+1

Đó là ý tưởng hoàn hảo, chỉ là những gì tôi đang tìm kiếm. Cảm ơn! – bobsoap

+0

Hackish nhưng những gì tôi đang tìm kiếm! và thật ngu ngốc khi tôi không nghĩ về điều này rõ ràng. Cảm ơn! –

+1

Với html5, bạn cũng có thể sử dụng một cái gì đó như dữ liệu mục tiêu hoặc băm dữ liệu để chọn phần tử/div. – nabrown78

1

Sau khi bạn đã hoàn tất tải tab phải, chạy này:

window.location = '#'; 
+0

đã không thử nó nhưng ... sẽ không di chuyển xuống và sau đó lên một lần nữa? – nico

+0

Thử nghiệm nó, nó hoạt động tốt trên các trình duyệt webkit nhưng không thành công trên FF. Chưa thử trên IE. Sẽ cho bạn biết những gì tôi tìm ra. –

3

Tôi sẽ sử dụng điều này:

window.scrollTo(0,0); 

Bằng cách này bạn không cần phải thay đổi id phần tử hoặc bất kỳ điều gì khác.

Tôi gặp phải vấn đề mà tôi muốn cuộn xuống tab, nhưng vì lý do nào đó, nó cuộn qua nó ở cuối trang (không, không có id trùng lặp). Tôi nghĩ đó là vì trình duyệt sẽ cuộn đến id trước khi nội dung tải xong và nội dung bổ sung đã đẩy phần tử ở trên vị trí cuộn mới). Tôi cố định nó với điều này:

if(document.location.hash) 
{ 
    window.location = document.location.hash; 
} 

"nếu" tuyên bố đây là bắt buộc hoặc bạn có thể nhận được một vòng lặp vô hạn

0
  1. Bạn chỉ nên ẩn các phần tử với id = băm theo mặc định
  2. Аnd sau đó, sau khi tải trang, bạn có thể hiển thị phần tử.

Bạn có thể tìm thêm thông tin ở đây: How to disable anchor "jump" when loading a page?

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