2011-02-01 26 views
5

Xin chào (đây là một bản sao bài đăng của tôi trên danh sách gửi thư của Seaside; đầu tiên hãy thử tại stackoverflow), Làm cách nào để hiển thị màn hình hiển thị danh sách chọn xuống để hiển thị lựa chọn được cập nhật từ một phiên khác, trong Firefox? (Tôi đang sử dụng 3.6.13)Khi sử dụng thẻ HTML <select>, thay đổi giá trị 'đã chọn' không được hiển thị trong Firefox

Sự cố này không xuất hiện trong Chrome, IE hoặc Opera.

Đây là kịch bản: Tôi có đối tượng miền có thuộc tính được hiển thị trong danh sách thả xuống. Một số phiên khác cập nhật thuộc tính. Tôi làm mới màn hình của mình, nhưng lựa chọn được hiển thị không thay đổi. Sử dụng Firebug, html được tạo sẽ hiển thị lựa chọn được cập nhật. Đây có thể là kiến ​​thức HTML cơ bản, nhưng giá trị được hiển thị không cập nhật để hiển thị tùy chọn 'đã chọn' đã thay đổi chưa? Hoặc là giá trị được thiết kế chỉ được đặt trên màn hình trang đầu tiên và sau đó chỉ bởi một hành động của người dùng?

Ví dụ: Tôi có một thành phần Seaside demo với biến lớp #testStateListSelection được chọn thành 'one' trong phiên Seaside. Nếu tôi thay đổi giá trị thành 'ba' trong phiên Seaside khác, giá trị được hiển thị vẫn là 'một' trong phiên ban đầu sau khi hiển thị lại, mặc dù "đã chọn" trong HTML được tạo cho thấy "ba".


renderSelectionListOn: html 
    html form: [ 
     html select 
      list: #('one' 'two' 'three' 'four' 'five'); 
      selected: self class testStateListSelection; 
      callback: [:value | self class testStateListSelection: value]. 
     html break. 
     html submitButton 
      callback: [Transcript cr; show: self class testStateListSelection]; 
      with: 'Save'] 

...the displayed value shows 'one', even though the HTML is... 

<select name="1">
<option value="1">one</option>
<option value="2">two</option>
<option value="3" selected="selected">three</option>
<option value="4">four</option>
<option value="5">five</option>
</select>

Làm thế nào để có được trình đơn thả xuống giá trị được lựa chọn để hiển thị 'ba'?

BTW: tất cả tôi biết về HTML hành vi & duyệt tôi đã học được từ mã hóa Seaside, vì vậy tôi có thể có một cái nhìn sai lệch ;-)

Cảm ơn sự giúp đỡ nào.

+0

Khi bạn nói "sau khi render một lần nữa" - có trình duyệt chuyển đến trang khác, hay bạn chỉ làm mới (F5 hoặc tương đương) trang? – Gareth

+0

Chỉ cần làm mới ... F5 hoặc nút "Tải lại trang hiện tại" –

Trả lời

8

Vấn đề là khi bạn làm mới trang của mình, trình duyệt của bạn sẽ nhớ tùy chọn nào đã được chọn trước đó. Tính năng này được thiết kế để làm cho dữ liệu biểu mẫu của bạn khó hơn trong các biểu mẫu dài và được thảo luận một chút trên Mozillazine forums

Thay vì làm mới trang. nếu bạn tải trang "mới" bằng cách chuyển đến thanh địa chỉ và nhấn trở lại, bạn sẽ nhận lại trang được tải từ máy chủ - với cập nhật select

+0

Điều này khiến tôi phát điên. Cảm ơn câu trả lời này. –

+0

Tôi tò mò muốn biết những gì có thể được thực hiện để buộc trình duyệt cập nhật hiển thị dựa trên giá trị đã chọn mà không yêu cầu người dùng tải lại nội dung một cách rõ ràng từ thanh địa chỉ. – mathieu

1

Bất cứ khi nào trang được làm mới, accessor self class testStateListSelection được chạy.

Thực tế, mã bạn cung cấp hoạt động hoàn hảo cho tôi. Bạn có chắc chắn rằng người truy cập hoạt động như mong đợi không?

testStateListSelection 
^testStateListSelection " <-- forgetting the return is a common problem " 

testStateListSelection: aString 
    testStateListSelection := aString 
+0

Có, người truy cập là chính xác. Tôi lặp lại tùy chọn đã chọn trong Bản ghi và HTML được tạo phản ánh lựa chọn. Vấn đề chỉ xuất hiện trong Firefox và chỉ khi giá trị #testStateListSelection bị thay đổi bởi một phiên khác. –

2

Nguyên nhân khác của sự cố có thể do trình duyệt của bạn cố gắng tự động điền biểu mẫu cho bạn dựa trên lần gửi cuối cùng của bạn. Đảm bảo bạn đã tắt tính năng này trong các tùy chọn của trình duyệt web của bạn.Bạn cũng có thể cố gắng để nói với các hình thức-tag với một thuộc tính không chính thức không tự động hoàn thành:

html form noAutocomplete; with: [ ... 
+1

Tuyệt vời. Điều đó hoạt động. HTML được tạo thêm tự động điền = "off" vào biểu mẫu và giá trị được cập nhật hiển thị chính xác khi trình duyệt được làm mới. Cảm ơn. –

1

Nếu sử dụng javascript để làm mới trang ...

window.location.reload(); 

... sẽ KHÔNG tái render các yếu tố được chọn. Họ sẽ giữ lại các giá trị động của họ bất kể HTML nguồn mới nói gì.

Để buộc các yếu tố chọn để tái render, sử dụng ...

window.location.reload(true); 
Các vấn đề liên quan