在 IE10 中保持占位符的焦点

IT技术 javascript jquery internet-explorer-10 placeholder
2021-03-10 01:37:06

在WebKit和火狐,在文本inputplaceholder棒周围focus-它并没有消失,直到input.val真正拥有它的东西。

有没有什么好方法可以强制 IE10 做同样的事情?

6个回答

来自Internet Explorer 开发人员中心:-ms-input-placeholder 伪类文档似乎暗示这是按设计工作的。

占位符文本以指定的样式显示,直到该字段获得焦点,这意味着可以键入该字段。当字段获得焦点时,它返回到输入字段的正常样式并且占位符文本消失。

编辑:如果我必须模仿这种行为,我会看看占位符 polyfill 库(设置默认值,在输入框上浮动灰色文本等),它适用于旧版本的 IE。它们必须被修改,因为它们可能具有检测占位符功能并遵从浏览器的功能。此外,这会产生“浏览器检测”代码气味。

更新: 一个“IE占位符文本消失”的问题是一个Twitter时问#AskIE 2014年6月19日,问题会议,并@IEDevChat 回答:“我们有一个活跃的错误这种行为下一个版本将提供一个补丁。”

如果您有标签,占位符通常只是重复它。这增加了用户处理的混乱并使表单更难而不是更容易使用。对我来说,占位符的全部好处是它们消除了对标签的需要——当它们正常工作时。
2021-04-22 01:37:06
@dudewad 我恭敬地不同意。如果用户在输入中看到标签,那就是一个标签,而在框外的额外标签是多余的,对用户没有帮助,并且占用宝贵的屏幕空间。规则和指导方针会发生变化,当它们没有意义时应该会发生变化。
2021-05-04 01:37:06
不幸的是,它让用户盯着一个空白的闪烁字段,没有提示告诉他们他们被要求输入什么。
2021-05-06 01:37:06
这不是正确答案,因为问题是:有没有一种好方法可以强制 IE10 做同样的事情?(保持占位符在焦点上可见)
2021-05-09 01:37:06
@DeborahSpeece:“不幸的是,它让用户盯着一个空白的闪烁字段,没有提示告诉他们他们被要求输入什么。” 好吧,你的领域也应该有一个<label>元素。placeholder不是 的替代品<label>,并且<label>应该表明该领域的意图。
2021-05-14 01:37:06

IE 开发人员在Twitter IEDevChatAskIE会话期间回应说,这是IE BugList 中的一个已知错误,他们将在未来版本中修复。

更新:-不幸的是,占位符行为在 IE11 中仍然相同,但似乎适用于 Edge/Spartan 版本。

未来的版本不会解决 IE10 中的问题,因此这不是问题的答案。
2021-05-07 01:37:06
感谢@m0sa,dudewad 指出。更新了我的答案,以便对其他人有所帮助。
2021-05-09 01:37:06

在 IE 10+ 中没有让占位符保持在字段焦点上的好方法,但是如果您尝试用占位符替换标签,那么您应该看看这个。

http://mozmonkey.com/2014/02/css-only-placeholders-field-labels-ie-float-labels/

这是一种结合占位符和标签来改善用户体验的方法。

链接的日期,对于今天偶然发现这里的任何人
2021-05-01 01:37:06

我想我会分享我用来解决这个问题的解决方法,因为 IE11 似乎仍然没有修复。

在我的示例中 - IE11 已将我的占位符值添加为 textarea 中的实际值。

这是我在模板视图中的内容:

<textarea placeholder="Type your message">
</textarea>

这是在 IE11 中前端呈现的内容:

<textarea placeholder="Type your message">
    Type your message
</textarea>

因此,当用户专注于该字段时 - 他们的光标位于 '..message here' 字符串的末尾 - 很奇怪!

我的解决方法是在加载时向元素添加一个初始类。然后是一个基本的“焦点”绑定事件来检查类是否存在 - 如果存在,它会删除 val 然后也删除类。因此,只要用户关注该字段 - 该值就会重置为空字符串。

这是绑定事件(这个特定的例子是在动态加载的模式上 - 你可以简化这个):

$(document).on( "focus", '.textarea', function () {
    if ($(this).hasClass('placeholder-val-present')) {
        $(this).val("").removeClass('placeholder-val-present');
    }
});

这很有效,因为当用户退出该字段时 - 重新添加占位符并且它可以正常工作,正如您在 IE11 和所有其他浏览器中所期望的那样。

我敢肯定这是一个非常小众的例子 - 但它可能对其他人有用!

诀窍是在输入元素上调用 focus() 和 select() 。

$("#elementId" ).focus();
$("#elementId" ).select();