问题 单击单选按钮组内的文本输入在Firefox中失去焦点


我在Firefox中遇到问题,如果你点击了 <input type="text"> 在Firefox中,焦点立即转移到Radio按钮兄弟。

该行为在Chrome中按预期工作。我需要额外的Javascript来解决这个问题吗?

这是JsFiddle


6800
2018-03-06 17:09


起源



答案:


似乎Firefox实际上正在做正确的事情 W3C

如果未指定for属性,但label元素具有   labelable元素后代,然后树中的第一个这样的后代   order是label元素的标记控件。

您的标签正在包装两个输入元素,因此当您在文本框中单击时,无线电(树顺序中的第一个此类后代)将获得焦点。

结果将根据浏览器实施此规则的方式而有所不同,因此要确保跨浏览器结果是,您需要JavaScript才能介入。


6
2018-03-06 17:13





MDN

允许的内容: 短语内容,但没有后代标签元素。   不允许使用除标记控件之外的可标记元素。

基本上,在标签中放置两个输入是无效的标记。更改您的html标记,以便标签仅包装无线电输入(和任何文本标签)...

<label class="radio">
    <input type="radio" name="requestfor" id="optionsRadios2" value="someoneelse" />
    Behalf of
</label>      
<input type="text" name="behalfof" id="behalfid"/>

...然后使用javascript(或在我的懒惰情况下,jQuery)来选择广播:

$('#behalfid').click(function(){
    $('#optionsRadios2').trigger('click');
});

这是小提琴


6
2018-05-13 10:21





有人挖了一遍,发现了这一点 的jsfiddle 使用jQuery解决方案。 射击 trigger.click();单击文本框时,无线电输入将选择它。


0
2018-03-06 19:18



请注意,此解决方案不会将输入包装在标签标记中,就像原始问题中的小提琴一样。因此,您无法单击文本“其他:”来选择单选按钮。 - matt burns


答案:


似乎Firefox实际上正在做正确的事情 W3C

如果未指定for属性,但label元素具有   labelable元素后代,然后树中的第一个这样的后代   order是label元素的标记控件。

您的标签正在包装两个输入元素,因此当您在文本框中单击时,无线电(树顺序中的第一个此类后代)将获得焦点。

结果将根据浏览器实施此规则的方式而有所不同,因此要确保跨浏览器结果是,您需要JavaScript才能介入。


6
2018-03-06 17:13





MDN

允许的内容: 短语内容,但没有后代标签元素。   不允许使用除标记控件之外的可标记元素。

基本上,在标签中放置两个输入是无效的标记。更改您的html标记,以便标签仅包装无线电输入(和任何文本标签)...

<label class="radio">
    <input type="radio" name="requestfor" id="optionsRadios2" value="someoneelse" />
    Behalf of
</label>      
<input type="text" name="behalfof" id="behalfid"/>

...然后使用javascript(或在我的懒惰情况下,jQuery)来选择广播:

$('#behalfid').click(function(){
    $('#optionsRadios2').trigger('click');
});

这是小提琴


6
2018-05-13 10:21





有人挖了一遍,发现了这一点 的jsfiddle 使用jQuery解决方案。 射击 trigger.click();单击文本框时,无线电输入将选择它。


0
2018-03-06 19:18



请注意,此解决方案不会将输入包装在标签标记中,就像原始问题中的小提琴一样。因此,您无法单击文本“其他:”来选择单选按钮。 - matt burns