2012-10-04 36 views
12

Tôi hiểu rằng hộp kiểm sẽ vẫn được chọn khi bạn quay lại trang qua nút quay lại. Các lớp được thêm vào bằng cách sử dụng addClass của jquery tuy nhiên thì không. Ai đó có thể giúp tôi hiểu khi nào đó sẽ tồn tại hay không khi quay lại qua nút quay lại? Ngoài ra, có cách nào để lưu giá trị của một biến để tôi có thể sử dụng các giá trị biến để tạo lại các đối tượng không tồn tại không?điều gì sẽ tồn tại khi quay lại qua nút quay lại?

+0

1 cho một câu hỏi nổi phrased, không tầm thường. Hãy cẩn thận để xây dựng trên các chi tiết cụ thể của kịch bản của bạn, hoặc nó chỉ là một vấn đề "nếu-"? –

Trả lời

13

Không có gì vẫn tồn tại - các lớp không tồn tại vì DOM được tạo lại, các biến JS không tồn tại vì mã được thực thi lại vv Đồng thời, việc triển khai trình duyệt dường như khá đồng ý để giữ cho người dùng nhập dữ liệu biểu mẫu để thuận tiện ngay cả khi hành vi này không phải là một phần của bất kỳ thông số kỹ thuật chính thức nào.

Nếu bạn yêu cầu một số dữ liệu tồn tại ở phía máy khách - rất có thể bạn đang làm điều gì đó sai về mặt kiến ​​trúc. Tại sao bạn cố gắng ghi đè hành vi nút "quay lại" của trình duyệt để người dùng được đưa trở lại trạng thái tùy ý, thay vì truy cập URL trước đó và hiển thị lại trang? Nếu ứng dụng của bạn tương tác nặng và hành vi nút "quay lại" này là mong muốn, bạn có thể muốn quay lại để người dùng điều hướng giữa các trang độc lập có lợi cho việc tạo các yêu cầu AJAX và dựa vào một cái gì đó như html5 history api cho phép bạn thực thi bất kỳ mã tùy ý nào để đưa trang vào trạng thái mong muốn.

Bạn không đi vào đủ chi tiết về những gì bạn thực sự mong muốn được lưu trữ - có thể là một localStorage hoặc thay thế bánh sẽ thích hợp hơn

Cập nhật:

Tôi đã đặt cùng nhau a fiddle để kiểm tra xem dữ liệu biểu mẫu sẽ tồn tại như thế nào khi duyệt qua lịch sử và các trường bị ẩn có sẵn để được xử lý bởi JS - vẫn không phải là một ý tưởng hay mặc dù imo

+0

bạn đang nói rằng tôi có thể sử dụng dữ liệu biểu mẫu ẩn sau đó vì nó sẽ tồn tại? – user584583

+0

@ user584583: Tôi đang nói dựa vào các trường nhập liệu có thể rất không nhất quán giữa các trình duyệt và không đáng tin cậy –

+0

Nói rằng * không có gì * vẫn tồn tại một chút gây hiểu nhầm. Bạn đã chỉ ra một điều gì đó tồn tại: dữ liệu biểu mẫu do người dùng nhập. Hai điều nữa vẫn tồn tại là vị trí cuộn và đối với thiết bị di động, mức thu phóng. – Nick

1

Nó khá nhiều phụ thuộc vào thực tế để bạn xử lý hoặc không băm của url, tức là nếu bạn làm, bạn có thể tồn tại tất cả mọi thứ.

CHỈNH SỬA:

Bạn phải làm quen với khái niệm về Ứng dụng một trang (SPA).

Có thể nhờ khả năng thay đổi location hash property và quản lý lịch sử trình duyệt.

Để thực hiện đơn giản này có tấn của các thư viện như Sammy.js

Mỗi khi bạn có sử dụng làm một hành động mà bạn đẩy trạng thái mới và do đó bạn sẽ có thể để xử lý cấp bách của nút quay lại.

Để có được ý tưởng về cách nó trông như thế nào, kiểm tra sau jsfiddle

Trong đoạn mã bạn thấy thiết lập routes:

Sammy(function() { 
    this.get('#:folder', function() { ... }); 
    this.get('#:folder/:mailId', function() { ... }); 
})).run(); 

nào xác định băm, tức là www.mygreatwebsite.com/#inbox/#1 và cách ứng dụng của bạn sẽ xử lý nó.

Có nhiều điều khác đang diễn ra ở đây, vì vậy các liên kết của tôi chỉ là điểm bắt đầu để bạn khám phá.

EDITED: much simplier example of using sammy.js

+0

bạn có thể làm rõ những gì bạn đã viết? băm? – user584583

+0

@ user584583 kiểm tra câu trả lời cập nhật của tôi. – vittore

2

Trình duyệt hiện đại cố gắng tồn tại lâu hơn và nhiều hơn nữa. Firefox đã thử nghiệm cách đây vài năm với việc bảo toàn mọi thứ bao gồm cả thay đổi tên lớp, miễn là máy chủ chỉ ra rằng trang có thể lưu trong tiêu đề HTTP và trang web chưa đăng ký bất kỳ trình xử lý sự kiện onunload nào. Firefox kích hoạt onpageshowonpagehide khi người dùng nhấn lại.

https://developer.mozilla.org/en-US/docs/Using_Firefox_1.5_caching https://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/