Firefox忽略选项selected =“ selected”


112

如果更改下拉菜单并刷新页面,则Firefox似乎会忽略所选属性。

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

实际上,它将选择您先前选择的选项(刷新之前)。对于我来说,这最终成为一个问题,因为下拉菜单中触发了一个事件,该事件改变了其他情况。有没有办法使Firefox停止此行为(除了在页面加载时触发另一个事件)?


我现在遇到此问题,并使用$('option:selected').each(function(){ $(this).prop('selected',true); });
plonknimbuzz

我注意到,这只会发生在选择缺少名称属性的元素上
Tlacaelel Ramon Luis

3
尝试autocomplete =“ off”
hemanjosko

Answers:


5

AFAIK,此行为被硬编码到Firefox中。

您可以尝试将每个表单元素设置为其defaultValue页面加载。


1
是否容易对表单中的所有元素执行此操作?
猴子扳手

@monkey使用jQuery,它应该像$(":input").val(this[0].defaultValue);(unested ); 在普通的JS中,每条路document.getElementsByTagname("select")
都要

尽管可能不是理想的解决方案,但是它可以工作..您必须对getAttribute(“ selected”)进行检查
Monkey-wrench

8
仅供参考-Marco
Demaio

281

autocomplete="off"HTML属性添加到每个选择标签。(来源:https : //stackoverflow.com/a/8258154/260080

这修复了FireFox中的ODD行为。


7
这是我的偏爱(非常感谢Marco和猴子扳手,在那儿节省了我的几束头发)。而且,您还必须将其添加到具有“值”或“选中”属性的所有<input>以及具有内容的任何<textarea>。
Swanny 2013年

22
这绝对是正确的答案。奇迹般有效。
Andrew Senner 2013年

1
这不是w3c有效
Jose De Gouveia

1
我在Windows Firefox版本44.0(2016年1月)上遇到了相同的问题。而且此解决方案仍然有效。
史蒂文

1
在firefox 47.0上像吊饰一样工作。
Blackecho

72

在firefox中,我注意到,除非将select放置在具有name属性的表单内,否则“ selected”属性将不起作用。


3
AM!修复了autocomplete =“ off”没有的地方。
little_birdie

花了一个小时用Firefox 78.0.2挠头。我的表单上不需要名称,但给它一个名称可以缓解。
betakilo

11

刚刚遇到了同样的问题,相信我,这个愚蠢的Firefox行为已经挣扎了10多个小时,我有7个下拉菜单,每个下拉菜单都会触发一个事件并填写24个隐藏的输入,因此您可以想象选择正确的选项24个错误的输入值!!!我最终找到的解决方案是使用添加以下代码行的Javascript重置表单:

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

PS:输入的值是从数据库中提取的,因此重置表单不会清空任何值,但会以某种方式告诉Firefox将地狱退回到selected = selected选项!


这是正确的答案。在选择元素上使用“自动完成”的答案是错误的,因为根据W3,“自动完成”不是选择字段的有效属性,并且会导致“此时元素选择不允许属性自动完成”。验证错误。
斯科特



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

将select包含在form属性中,它将起作用。

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

可能是mozilla中的错误,但请尝试为下拉列表取一个名称。


1

自动完成功能也不适合我。

这是我使用jquery编写的javscript修复程序:

$('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恢复对表单的任何更改时,我的onchange事件不会触发。
猴子扳手

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

我只是将其放在页面顶部(设置了适当的ID),它对我有用。用循环替换页面上的所有选择的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>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.