Firefox bỏ qua tùy chọn đã chọn = “đã chọn”


112

Nếu bạn thay đổi trình đơn thả xuống và làm mới trang, Firefox dường như bỏ qua thuộc tính đã chọn.

<option selected="selected" value="Test">Test</option>

Trên thực tế, nó sẽ chọn tùy chọn bạn đã chọn trước đó (trước khi làm mới). Điều này kết thúc là một vấn đề đối với tôi vì có một sự kiện được kích hoạt trên menu thả xuống làm thay đổi những thứ khác. Có cách nào để khiến firefox dừng hành vi này (ngoài việc kích hoạt một sự kiện khác khi tải trang) không?


tôi phải đối mặt với vấn đề này ngay bây giờ và tôi sửa chữa nó sử dụng$('option:selected').each(function(){ $(this).prop('selected',true); });
plonknimbuzz

Tôi nhận thấy rằng điều này chỉ xảy ra để lựa chọn yếu tố mà thiếu một thuộc tính tên
Tlacaelel Ramon Luis

3
thử autocomplete = "off"
hemanjosko

Câu trả lời:


5

AFAIK, hành vi này được mã hóa cứng vào Firefox.

Bạn có thể thử đặt từng phần tử biểu mẫu thành phần tử của nó defaultValuekhi tải trang.


1
Có dễ dàng thực hiện điều này cho tất cả các phần tử trong biểu mẫu không?
Monkey-wrench

@monkey sử dụng jQuery, nó sẽ giống như $(":input").val(this[0].defaultValue);(chưa được kiểm tra); trong JS bình thường, đi bộ mặc dù mỗidocument.getElementsByTagname("select")
Pekka

Mặc dù có thể không phải là giải pháp lý tưởng, nhưng điều này hoạt động .. bạn phải kiểm tra trên getAttribute ("đã chọn")
khỉ-cờ lê

8
FYI - Có một câu trả lời hay hơn nhiều dưới đây của Marco Demaio
jonlink 21/12/14

281

Thêm autocomplete="off"thuộc tính HTML vào mỗi thẻ được chọn. (nguồn: https://stackoverflow.com/a/8258154/260080 )

Điều này khắc phục hành vi ODD trong FireFox.


7
Đây là sở thích của tôi (cảm ơn rất nhiều Marco và cờ lê khỉ, đã lưu một vài lọn tóc của tôi ở đó). Và bạn cũng sẽ phải thêm nó vào mọi <input> có thuộc tính "giá trị" hoặc "đã kiểm tra" và bất kỳ <textareosystem nào có nội dung.
Swanny

22
Đây chắc chắn phải là câu trả lời chính xác. Hoạt động như một sự quyến rũ.
Andrew Senner

1
đây không phải là một w3c hợp lệ
Jose De Gouveia

1
Tôi đã gặp sự cố tương tự trên Windows, Firefox ver 44.0 (2016-Jan). Và giải pháp này vẫn hoạt động.
Steven

1
Hoạt động như một sự quyến rũ trên firefox 47.0.
Blackecho

72

Trong firefox, tôi nhận thấy rằng thuộc tính "đã chọn" sẽ không hoạt động trừ khi bạn đặt vùng chọn bên trong biểu mẫu, nơi biểu mẫu có thuộc tính tên.


3
RẦM! Điều đó đã khắc phục sự cố trong đó autocomplete = "off" không.
little_birdie

Tôi đã dành một giờ để vò đầu bứt tai với Firefox 78.0.2. Không cần tên trên biểu mẫu của tôi nhưng đặt cho nó một cái tên đã giúp đỡ.
betakilo

11

Chỉ gặp vấn đề tương tự, hãy tin tôi đã hơn 10 giờ vật lộn với hành vi firefox ngu ngốc này, tôi có 7 trình đơn thả xuống, mỗi mục trong số chúng sẽ kích hoạt một sự kiện và điền vào 24 đầu vào ẩn, vì vậy bạn có thể tưởng tượng có tùy chọn phù hợp được chọn với 24 giá trị đầu vào sai !!! giải pháp cuối cùng tôi tìm thấy là đặt lại biểu mẫu bằng Javascript thêm dòng mã này:

window.onload = function() { document.forms['MarkerForm'].reset(); };

PS: các đầu vào có các giá trị được lấy từ cơ sở dữ liệu, vì vậy việc đặt lại biểu mẫu không làm trống bất kỳ giá trị nào nhưng theo một cách nào đó, nó sẽ yêu cầu firefox quay trở lại tùy chọn đã chọn = đã chọn!


Đây là câu trả lời chính xác. Các câu trả lời nói rằng sử dụng "tự động hoàn thành" trên một phần tử được chọn là sai vì "tự động hoàn thành" KHÔNG phải là một thuộc tính hợp lệ cho một trường được chọn theo W3 và sẽ gây ra "Tự động hoàn thành thuộc tính không được phép trên phần tử được chọn tại thời điểm này." lỗi khi xác thực.
Scott


5

Cố gắng tắt autocompletethuộc tính của đầu vào được chọn ... đôi khi trình duyệt bỏ qua selectvì điều đó


3

Tôi đang sử dụng FF 25.0.1

Nó bỏ qua selected=""selected="selected".

Nhưng nếu tôi chỉ đơn giản là thử selectedtùy chọn được chọn.

Hành vi kỳ lạ (không tuân thủ). Tôi biết selectedlà HTML5 hợp lệ và đó là dạng ngắn nhất, nhưng tôi thường viết mã cũng xác thực như XML được định dạng tốt, vì vậy tôi có thể sử dụng bất kỳ công cụ xác thực XML nào để kiểm tra kết quả của mình theo cách rất nghiêm ngặt (và việc trao đổi dữ liệu rất dễ dàng .. .)

Theo W3C, các biến thể này phải hợp lệ trên các thuộc tính boolean:

HTML5:  boolAttr="" | boolAttr="boolAttr" | boolAttr
XHTML5: boolAttr="" | boolAttr="boolAttr"

Tôi thích cái đầu tiên hơn, vì nó gần bằng biến thể cuối cùng (không phải xml) nhưng phải xác thực là cả XHTML5 VÀ HTML5. Vì vậy, tôi hy vọng, Mozilla sẽ sửa chữa nó!


3

sử dụng .prop () thay vì .attr ()

This does not work in firefox.
  $( 'option[value="myVal"]' ).attr( 'selected', 'selected' );
use this one
  $( 'option[value="myVal"]' ).prop( 'selected', 'selected' );

In other way
  $( this ).prop( 'selected', 'selected' );

Sử dụng .prop('selected', true);hoặc .prop('selected', false);(jQuery) để bật / tắt hoạt động cho cả Firefox và Chrome.
JimB

2

Bạn có thể gọi .reset()vào biểu mẫu trước khi làm mới trang.


2

bao gồm thuộc tính select in form và nó sẽ hoạt động.

<!-- will not work in firefox -->
<option selected="selected" value="Test">Test</option>

<!-- this will work in firefox -->
<form>
 <option selected="selected" value="Test">Test</option>
</form>

2

Với cái tên thì hay hơn = >>

form id="UMForm" name="UMForm" class="form"

Lựa chọn sẽ lấy thuộc tính đã chọn


1

Có thể đó là một lỗi trong mozilla nhưng hãy thử đặt tên cho danh sách thả xuống.


1

tự động điền cũng không hoạt động cho tôi.

Đây là bản sửa lỗi javscript được viết bằng jquery mà tôi sử dụng:

$('input[type="radio"][selected]').click();

1
<option selected="selected" value="Test">Test</option>

Trong trường hợp này, điều này hoạt động cho cả Chrome và Firefox.

$('option[value="Test"]').prop('selected', true);

Tôi đã sử dụng .attr()thay vì.prop()


1

Để hiển thị mục đầu tiên của danh sách thả xuống, hãy sử dụng ProjectName.ClearSelection();

Đặt các dòng trong trang thiết kế của bạn để hoạt động trên tất cả các trình duyệt Và cũng đặt điều này vào mã phía sau khi tải trang.

$(document).ready(function () {
    $("#content_ProjectName option[value='1']").prop("selected", true);
});

0

Nếu bạn thay đổi lựa chọn và làm mới trang firefox sẽ khôi phục các thay đổi của bạn trên biểu mẫu, đó là lý do tại sao bạn cảm thấy như lựa chọn không hoạt động. Thay vì làm mới, hãy thử mở liên kết trên một tab mới.


Điều này đúng, tuy nhiên dường như không giải quyết được vấn đề của tôi. Tôi vẫn cần một công việc xung quanh vì sự kiện onchange của tôi không kích hoạt khi firefox khôi phục bất kỳ thay đổi nào đối với biểu mẫu khi tôi làm mới.
Monkey-wrench

0

Đây là giải pháp của tôi:

var select = document.getElementById('my_select');
for(var i=0; i < select.options.length; i++){
    select.options[i].selected = select.options[i].attributes.selected != undefined;
}

Tôi chỉ đặt nó ở đầu trang (với bộ id thích hợp), và nó phù hợp với tôi. Thay thế getElementById bằng một vòng lặp trên tất cả các lựa chọn trên trang, tôi để lại như một bài tập cho người đọc;).


0

Đối với tôi không có giải pháp nào ở trên hoạt động. Tôi phải đặt lựa chọn rõ ràng nếu không có lựa chọn nào được đặt:

if (foo.find(':selected').length === 0) {
    $(foo.find('option')[0]).attr('selected', 'selected');
}

Tôi ước firefox sẽ sửa lỗi này :(


0

Tại nơi làm việc, tôi vừa sửa một lỗi trong đó tùy chọn hộp chọn hiển thị đúng trong Chrome nhưng không hiển thị đúng trong Firefox, trên cùng một trang web. Nó hóa ra là một cái gì đó hoàn toàn khác với các vấn đề ở trên, nhưng có thể là một vấn đề bạn đang gặp phải.

Trong Chrome, màu phông chữ của hộp chọn là màu đen. Vì một số lý do trong Firefox, hộp chọn kế thừa màu chữ từ vùng chứa, màu trắng. Sau khi tôi thêm quy tắc CSS để buộc màu phông chữ của hộp chọn đó là màu đen, bộ giá trị đã được hiển thị chính xác.


0

Không autocomplete="off"hoặc đặt nó bên trong một formtác phẩm cho tôi.

Điều hiệu quả là chỉ sử dụng thuộc tính đã chọn không có "giá trị" như sau:

<option @(Model.Source == TermSource.Instagram ? "selected" : "")>
    Instagram
</option>
<option @(Model.Source == TermSource.Facebook ? "selected" : "")>
    Facebook
</option>

vì vậy nó hiển thị <option selected>...</option>hoặc chỉ<option>...</option>

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.