Firefox ігнорує вибраний варіант = "вибрано"


112

Якщо змінити спадне меню та оновити сторінку, Firefox, здається, ігнорує вибраний атрибут.

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

Фактично вибере параметр, який ви вибрали раніше (до оновлення). Це в кінцевому підсумку є проблемою для мене, оскільки в спадному меню відбувається подія, яка змінює інші речі. Чи є спосіб змусити Firefox припинити цю поведінку (крім запуску іншої події, коли сторінка завантажується)?


Я зіткнувся з цією проблемою зараз, і я $('option:selected').each(function(){ $(this).prop('selected',true); });
вирішу

Я помітив, що це трапляється лише для вибору елементів, у яких відсутній атрибут імені
Tlacaelel Ramon Luis Luis

3
спробуйте autocomplete = "off"
hemanjosko

Відповіді:


5

AFAIK, така поведінка важко закодована у Firefox.

Ви можете спробувати встановити кожен елемент форми на його defaultValueна завантаженні сторінки.


1
Чи легко це зробити для всіх елементів форми?
мавповий ключ

@monkey, використовуючи jQuery, це має бути щось на зразок $(":input").val(this[0].defaultValue);(неперевірене); в звичайному JS, ходіть хоч коженdocument.getElementsByTagname("select")
Pekka

Хоча, можливо, це не ідеальне рішення, це спрацьовує. Ви повинні зробити перевірку на getAttribute ("вибрано")
ключ

8
FYI - Є набагато краща відповідь нижче від Марко Демайо
jonlink

281

Додайте autocomplete="off"атрибут HTML до кожного тегу вибору. (джерело: https://stackoverflow.com/a/8258154/260080 )

Це виправляє поведінку ODD у FireFox.


7
Це моє вподобання (дуже дякую Марко та мавпочки, що врятувало там кілька скупчень мого волосся). І вам також доведеться додавати його до кожного <input> з атрибутом "value" або "check" і будь-якого <textarea> зі змістом.
Swanny

22
Це безумовно має бути правильною відповіддю. Працює як шарм.
Ендрю Сеннер

1
це не вірно w3c
Хосе Де Гувея

1
У мене була така ж проблема в Windows, Firefox ver 44.0 (2016-січень). І це рішення все ще працює.
Стівен

1
Працює як шарм на Firefox 47.0.
Blackecho

72

У Firefox я помітив, що "вибраний" атрибут не працюватиме, якщо ви не помістите вибрану форму всередині форми, де форма має атрибут імені.


3
БАМ! Це виправлено там, де autocomplete = "off" не зробив.
little_birdie

Провів годину, чухаючи голову Firefox 78.0.2. Мені не потрібно було імені на моїй формі, але надавши йому одне полегшення.
betakilo

11

У мене було те саме питання, повірте, я вже більше 10 годин бореться з цією дурною поведінкою Firefox, у мене 7 спасних місць, кожна з них спричинить подію та заповнить 24 прихованих введення, тож ви можете уявити, як вибрати правильний варіант 24 неправильні вхідні значення !!! нарешті я знайшов рішення - скинути форму з Javascript, додавши цей рядок коду:

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

PS: вхід має значення, витягнуті з бази даних, тому скидання форми не спорожнює жодне значення, але певним чином повідомляє firefox повернутися до пекла = вибраний варіант!


Це правильна відповідь. Відповіді, що говорять про використання "автозаповнення" у виділеному елементі, помилкові, оскільки "автозаповнення" НЕ є дійсним атрибутом для вибраного поля згідно W3 і призведе до того, що "Автозаповнення атрибутів не дозволено для вибору елемента в цій точці". помилки під час перевірки.
Скотт

6

Це просто Firefox запам’ятовуючи ваш попередній вибір, коли освіжав. Спробуйте натомість оновити оновлення.

Також те саме питання тут: https://stackoverflow.com/a/1505693/1069232

Також дивіться тут: https://bugzilla.mozilla.org/show_bug.cgi?id=274795


здається, що це особливість Firefox.
Олексій Кислицин

5

Спробуйте відключити autocompleteатрибут вибору введення ... Іноді браузер selectчерез це ігнорує


3

Я використовую FF 25.0.1

Це ігнорує selected=""і selected="selected".

Але якщо я просто спробую selected, обраний варіант.

Дивна (невідповідна) поведінка. Я знаю, що selectedце дійсний HTML5 і це найкоротша форма, але я зазвичай пишу код, який також підтверджує, як добре сформований XML, щоб я міг використовувати будь-який інструмент перевірки XML, щоб перевірити результати дуже суворо (і обмін даними дуже простий .. .)

Відповідно до W3C, ці варіанти повинні бути дійсними для булевих атрибутів:

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

Я вважаю за краще перший, так як він майже такий же короткий, як і останній (не xml-відповідний) варіант, але повинен підтверджувати як XHTML5, так і HTML5. Тож сподіваюся, Mozilla це виправить!


3

використовувати .prop () замість .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' );

Використання .prop('selected', true);або .prop('selected', false);(jQuery) для вмикання / відключення робіт для Firefox та Chrome.
JimB

2

Ви можете зателефонувати .reset()до форми, перш ніж оновити сторінку.


2

додайте атрибут форм у формі, і він буде працювати.

<!-- 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

З назвою краще = >>

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

Вибір буде приймати вибраний атрибут



1

Автозаповнення також не працювало для мене.

Це виправлення javscript, написане в jquery, яке я використовую:

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

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

У цьому випадку це працювало і для Chrome, і для Firefox.

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

Я використовував .attr()замість.prop()


1

Щоб показати перший елемент випадаючого меню, використовуйте ProjectName.ClearSelection();

Розмістіть рядки на своїй сторінці дизайну, щоб вони працювали на всіх веб-переглядачах, а також поставте це на код позаду на завантаженні сторінки.

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

0

Якщо ви зміните функцію вибору та оновіть сторінку, firefox відновить ваші зміни у формі, тому ви відчуваєте, що вибір не працює. Замість оновлення спробуйте відкрити посилання на новій вкладці.


Це правда, проте, схоже, не вирішує мою проблему. Мені все ще потрібна робота, оскільки моя подія змінення не спрацьовує, коли firefox відновлює будь-які зміни форми, коли я оновлююсь.
мавповий ключ

0

Це моє рішення:

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;
}

Я просто помістив це вгорі сторінки (з відповідним набором ідентифікаторів), і він працює для мене. Заміняючи getElementById циклом на всіх виділених сторінках, я залишаю вправу для читача;).


0

Для мене жодне з вищезгаданих рішень не спрацювало. Я повинен був чітко встановити вибір, якщо жоден не встановлений:

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

Я б хотів, щоб Firefox виправив це :(


0

На роботі я просто виправив помилку, коли параметр вибору відображався належним чином у Chrome, але не у Firefox, на одній веб-сторінці. Це виявилося щось зовсім інше, ніж проблеми вище, але, можливо, це може бути проблема, яку ви відчуваєте.

У Chrome колір шрифту вибраного поля був чорним. Чомусь у Firefox поле вибору успадкувало колір шрифту від контейнера, який був білим. Після того, як я додав правило CSS, щоб змусити вибраний колір шрифту поля бути чорним, набір значень був правильно відображений.


0

Ні, autocomplete="off"ні розміщення його всередині formтвору для мене не працює.

Що працював в тому, щоб використовувати тільки атрибут обраного без «цінності» , як це:

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

значить, або виводиться <option selected>...</option>, або просто<option>...</option>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.