IE9 HTML5 占位符 - 人们是如何实现这一目标的?

Posted

技术标签:

【中文标题】IE9 HTML5 占位符 - 人们是如何实现这一目标的?【英文标题】:IE9 HTML5 placeholder - how are people achieving this? 【发布时间】:2012-07-03 11:04:37 【问题描述】:

我正在尝试在我的 Web 应用程序中使用 placeholder="xxx" 属性,但我不想为 IE9 提供特殊的视觉效果。人们能否提出一些在 IE9 中实现此功能的好建议?

我在这里找到了几个链接,但建议的脚本都不够用……答案是从 2011 年年中开始的,所以我想也许有更好的解决方案。也许有一个被广泛采用的 jQuery 插件?我不想使用任何需要侵入性代​​码的东西,例如需要某个 css 类或其他东西。

谢谢。

EDIT - 我也需要这个来处理密码输入字段。

// the below snippet should work, but isn't.
$(document).ready(function() 
   initPlaceholders()();


function initPlaceholders() 
        $.support.placeholder = false;
var test = document.createElement('input');
if ('placeholder' in test) 
    $.support.placeholder = true;
    return function()  
 else 
    return function() 
        $(function() 
            var active = document.activeElement;
            $('form').delegate(':text, :password', 'focus', function() 
                var _placeholder = $(this).attr('placeholder'),
                    _val = $(this).val();
                if (_placeholder != '' && _val == _placeholder) 
                    $(this).val('').removeClass('hasPlaceholder');
                
            ).delegate(':text, :password', 'blur', function() 
                var _placeholder = $(this).attr('placeholder'),
                    _val = $(this).val();
                if (_placeholder != '' && (_val == '' || _val == _placeholder)) 
                    $(this).val(_placeholder).addClass('hasPlaceholder');
                
            ).submit(function() 
                $(this).find('.hasPlaceholder').each(function()  $(this).val(''); );
            );
            $(':text, :password').blur();
            $(active).focus();
        );
    


【问题讨论】:

placeholder in ie9 的可能重复项 【参考方案1】:

我们只是研究了同样的事情。在做了一些小改动后,我们决定重用 Aaron McCall 的 this gist。主要优点是代码简单易懂:

    删除内核和 setup_placeholders 部分。只需立即在匿名函数中调用它。

    test之前添加var

对于支持placeholder 的浏览器,它只是回退到那个。它还处理现有表单中的新输入元素(注意使用delegate)。但不处理动态的新表单元素。它可能会被修改为使用jQuery.on

如果你不喜欢这个,你可以使用其中一个here。然而,它们中的一些过于复杂,或者有像setTimeout 这样的用于检测新元素的可疑设计决策。

请注意,它需要使用两对括号,因为您调用的是匿名函数,然后调用返回的函数(这可能会以不同的方式分解):

(function () 
  // ...
)()();

【讨论】:

啊。好吧,无论如何,谢谢你的链接。没有指定许可证;不知道有没有? 其实我只是想这样做,在 IE9 中什么也没发生。我调用建议的代码以:$.support.placeholder = false; 开头,但我没有看到它获取占位符属性值....这对密码字段有效吗? @Adam,不,它不适用于密码,但您可以在:text 之后添加, :password 为了在密码字段上工作,它们需要更改为文本字段(在某些版本的 IE 中是不允许的(在这种情况下,您必须创建一个临时文本-密码字段旁边的字段))。否则它只会显示 **** 而不是占位符文本。 This plugin by Mathias Bynens 无需任何调整或修改即可完美运行。【参考方案2】:

不久前我写了一个 jquery 插件,它为任何不支持它的浏览器添加了占位符支持,并且在那些支持它的浏览器中什么也不做。

Placeholder Plugin

【讨论】:

【参考方案3】:

这是一个同样适用于密码字段的 jQuery 插件。它不像 Matthew 建议的代码那么小,但它有更多的修复。我也成功地将它与 H5Validate 一起使用。

http://webcloud.se/code/jQuery-Placeholder/

【讨论】:

这一项有效,但不适用于密码字段。有人有解决方案吗? 嗯,它确实适用于密码字段。您可以在此处查看从第 10 行开始的相关代码:github.com/danielstocks/jQuery-Placeholder/blob/master/… 这很奇怪,因为它实际上并没有在密码字段上表现。我确实查看了代码,看看你在指出什么。嗯.... 这很奇怪。你可以使用 DOM 检查器来查看发生了什么吗? (占位符集、类型属性更改或插入虚拟文本字段等?)

以上是关于IE9 HTML5 占位符 - 人们是如何实现这一目标的?的主要内容,如果未能解决你的问题,请参考以下文章

IE9 javascript 问题的占位符脚本

IE9 RTW 是不是支持输入元素的占位符属性?

输入类型日期html5的占位符

输入类型日期html5的占位符

输入占位符css在IE9中不起作用[重复]

使用 IE9、jquery 插件/html 验证的占位符问题