Firefox 锚点内的输入框中没有文本选择

Posted

技术标签:

【中文标题】Firefox 锚点内的输入框中没有文本选择【英文标题】:No text selection in input box inside anchor in Firefox 【发布时间】:2014-01-12 19:15:47 【问题描述】:

如果文本输入标记放置在锚点内,那么在 Firefox(在 Windows 上)中,无法在文本框内操作文本 - 文本光标不会改变其位置,并且无法选择文本。在 Chrome 中,您可以更改光标位置,但不能选择文本。

在某些情况下,我们可以将父级设置为锚点之外的其他东西,但有没有办法在一般情况下避免这种行为?

这是 html 代码:

<p>No text select in FF:</p>
<a href="#">
   <input type="text" value="7777" />
</a>

<p>Working text select in FF:</p>
<span>
   <input type="text" value="8888" />
</span>

还有fiddle。

【问题讨论】:

HTML 禁止嵌套交互式元素。如果您在锚点中有输入,则您没有 HTML。应该会出现破损。 我完全同意,而且我一点也不喜欢这一点——但是当结合 3rd 方控件时,可能会出现这种情况(事实上,在我的情况下),所以我想知道是不是可能会以某种方式影响这种行为,也许社区可以帮助找到解决方案。 【参考方案1】:

您可以在输入元素获得焦点时移除 href 属性。只要没有 href 属性,您就可以在输入字段内选择文本(在 safari、chrome 和 firefox 中测试)。

<a href="http://www.google.de" id="link">
  link
  <input type="text" id="input">
</a>

(function () 
  var link = document.getElementById('link');
  var input = document.getElementById('input');

  var saveHref = null;

  input.addEventListener('focusin', function () 
      savedHref = link.href;
      link.removeAttribute('href');
  );

  input.addEventListener('focusout', function () 
      link.href = savedHref;
      savedHref = null;
  );

)();

工作示例: http://codepen.io/jjd/pen/JYwLVr

【讨论】:

这是一个棘手问题的有趣解决方案。谢谢!【参考方案2】:

这是因为浏览器中的实现错误。

实际上,当我们点击浏览器时,它会查找对象的类型 这样 1.这是链接吗 2.这是任何其他类型(输入区域,图像,

为什么它首先检查类型“链接”

 because clickig is firstly implemented for opening links,   
 anf its main usage is for open links

它首先将其检测为链接,然后它将调用

。 openlink(示例)函数

【讨论】:

以上是关于Firefox 锚点内的输入框中没有文本选择的主要内容,如果未能解决你的问题,请参考以下文章

IE 9 和 IE 10 时不时无法在输入文本框中输入文本

如何在文本框中选择文本?

如下图:如果在密码文本框后加隐藏域是不是是对密码文本框中输入的内容有效?红圈内的输入内容起作用?

为啥这个 CSS 转换在锚点内的 SVG 上不起作用

如何在文本框中输入后编辑十进制数

如何从下拉列表中选择并输入文本