如何在IE8和9中支持占位符属性


132

我有一个小问题,placeholderIE 8-9不支持输入框的属性。

在我的项目(ASP Net)中获得这种支持的最佳方法是什么。我正在使用jQuery。我需要使用其他一些外部工具吗?

http://www.hagenburger.net/BLOG/HTML5-Input-Placeholder-Fix-With-jQuery.html好的解决办法?


7
步行者的角落:这是属性,而不是标签。标签周围有尖括号(例如<input>);属性是尖括号内的键/值对(如placeholder="This is an attribute value")。将问题保持原样,以便将来提出相同问题的人都可以找到它。
Paul D. Waite

2
该链接无法按原样工作。我删除了$(“ [placeholder]”)选择器周围的多余引号,这很好。
claptimes 2013年

1
该链接中的解决方案也无法按照webkit中的本机支持处理密码框
geedubb 2013年

1
你给的作品确实很好的联系-除了密码,它的工作原理治疗和简单得不能再简单设置
hobailey

1
该链接是一个不错的解决方案
Pixelomo

Answers:


89

您可以使用以下jQuery插件:https : //github.com/mathiasbynens/jquery-placeholder

但是您的链接似乎也是一个很好的解决方案。


2
问题中建议的链接对我不起作用;表单提交有问题。您在此答案中建议的解决方案似乎更强大并且可以治疗。
强尼·怀特

实际上,我尝试过此方法,并且效果很好-但是,一旦我加载包含表单和密码字段的灯箱,一切就可以正常工作,但密码字段却无法工作-它只是空的。
Jurik

6
在我的IE8密码占位符中是点
Mladen Janjetovic

我也看不到ie8。我通过在ie8中在字段上方显示一些文本来解决此问题。
jhawes

jQuery占位符的行为有所不同。它将删除焦点上的占位符,而不是在用户开始在字段上键入内容(如Firefox中占位符的正常行为)时删除。
supertonsky

89

您可以使用以下任何一种polyfill:

这些脚本将在不支持该placeholder属性的浏览器中添加对该属性的支持,并且它们不需要jQuery!


4
我赞成这一点是因为我喜欢非jquery解决方案的想法,但是现在此代码在IE8中有问题,因此不适合我。github.com/jamesallardice/Placeholders.js/issues/17
Dan Searle

3
此解决方案不处理密码框
Jurik 2013年

2
@Jurik我添加了一个额外的polyfill-希望对您有所帮助。
starbeamrainbowlabs 2013年

1
甚至这个插件的发行商都说,这个插件不处理< IE9github.com/jamesallardice/Placeholders.js/issues/…中的
Jurik 2013年

密码字段在iE8中仍然不起作用。接受的答案链接似乎在ie8中的密码字段中起作用。
Susie 2013年

24

$ .Browser.msie是不是最新的JQuery了...你必须使用 $。支持

如下所示:

 <script>

     (function ($) {
         $.support.placeholder = ('placeholder' in document.createElement('input'));
     })(jQuery);


     //fix for IE7 and IE8
     $(function () {
         if (!$.support.placeholder) {
             $("[placeholder]").focus(function () {
                 if ($(this).val() == $(this).attr("placeholder")) $(this).val("");
             }).blur(function () {
                 if ($(this).val() == "") $(this).val($(this).attr("placeholder"));
             }).blur();

             $("[placeholder]").parents("form").submit(function () {
                 $(this).find('[placeholder]').each(function() {
                     if ($(this).val() == $(this).attr("placeholder")) {
                         $(this).val("");
                     }
                 });
             });
         }
     });
 </script>

2
这就像一个魅力,我比添加插件更喜欢它,非常感谢
LemonCool 2014年

@vsync不,如果您读得不好,我说过插件,复数形式,我发现大多数选项都需要使用多个文件,大量的代码,而不是几行。您不是很自大吗?该评论如何改善答案
LemonCool 2014年

这实际上不应该使用。这是供jQuery内部使用的,可以随时删除。api.jquery.com/category/deprecated/deprecated-1.9
威尔

3

如果您使用jquery,可以这样做。来自此网站的带有Jquery的占位符

$('[placeholder]').parents('form').submit(function() {
  $(this).find('[placeholder]').each(function() {
    var input = $(this);
    if (input.val() == input.attr('placeholder')) {
      input.val('');
    }
  })
});

这些是备用链接

  1. 占位符jQuery库
  2. HTML5 polyfills-转到占位符部分

3
该答案有效,但是您需要单击链接以获取完整功能。单独的代码无法正常工作。
Hawkee

1
ofc无法正常工作,这是一个嘲笑代码!您为什么一次又一次地为submit事件绑定相同的“表单” ?是什么提交事件有什么用
VSYNC

如果我输入与IE8中占位符文本相同的文本,将会发生什么?
Bimal Das

3

我尝试过的几个插件都存在兼容性问题,在我看来,这是在文本输入上支持占位符的最简单方法:

function placeholders(){
    //On Focus
    $(":text").focus(function(){
        //Check to see if the user has modified the input, if not then remove the placeholder text
        if($(this).val() == $(this).attr("placeholder")){
            $(this).val("");
        }
    });

    //On Blur
    $(":text").blur(function(){
        //Check to see if the use has modified the input, if not then populate the placeholder back into the input
        if( $(this).val() == ""){
            $(this).val($(this).attr("placeholder"));
        }
    });
}

是否支持IE9?
Viku

2
$(function(){    
    if($.browser.msie && $.browser.version <= 9){
        $("[placeholder]").focus(function(){
            if($(this).val()==$(this).attr("placeholder")) $(this).val("");
        }).blur(function(){
            if($(this).val()=="") $(this).val($(this).attr("placeholder"));
        }).blur();

        $("[placeholder]").parents("form").submit(function() {
            $(this).find('[placeholder]').each(function() {
                if ($(this).val() == $(this).attr("placeholder")) {
                    $(this).val("");
                }
            })
        });
    }
});

试试这个


1

我用这个,这只是Javascript。

我只是有一个带有值的输入元素,当用户单击该输入元素时,它将更改为没有值的输入元素。

您可以使用CSS轻松更改文本的颜色。占位符的颜色是ID #IEinput中的颜色,键入的文本将是ID #email中的颜色。不要使用getElementsByClassName,因为不支持占位符的IE版本也不支持getElementsByClassName!

通过将原始密码输入的类型设置为文本,可以在密码输入中使用占位符。

修补匠:http ://tinker.io/4f7c5/1-JSfiddle服务器已关闭!

*对不起,我的英语不好

JAVASCRIPT

function removeValue() {
    document.getElementById('mailcontainer')
        .innerHTML = "<input id=\"email\" type=\"text\" name=\"mail\">";
    document.getElementById('email').focus(); }

的HTML

<span id="mailcontainer">
    <input id="IEinput" onfocus="removeValue()" type="text" name="mail" value="mail">
</span>

3
如果字段为空且焦点丢失,则占位符应回来
Chris Pratt

1

对于其他人登陆这里。这对我有用:

//jquery polyfill for showing place holders in IE9
$('[placeholder]').focus(function() {
    var input = $(this);
    if (input.val() == input.attr('placeholder')) {
        input.val('');
        input.removeClass('placeholder');
    }
}).blur(function() {
    var input = $(this);
    if (input.val() == '' || input.val() == input.attr('placeholder')) {
        input.addClass('placeholder');
        input.val(input.attr('placeholder'));
    }
}).blur();

$('[placeholder]').parents('form').submit(function() {
    $(this).find('[placeholder]').each(function() {
        var input = $(this);
        if (input.val() == input.attr('placeholder')) {
            input.val('');
        }
    })
});

只需将其添加到您的script.js文件中即可。由http://www.hagenburger.net/BLOG/HTML5-Input-Placeholder-Fix-With-jQuery.html提供


0

由于大多数解决方案都使用jQuery,或者我不希望它如此令人满意,所以我为自己编写了mootools的代码段。

function fix_placeholder(container){
    if(container == null) container = document.body;

    if(!('placeholder' in document.createElement('input'))){

        var inputs = container.getElements('input');
        Array.each(inputs, function(input){

            var type = input.get('type');

            if(type == 'text' || type == 'password'){

                var placeholder = input.get('placeholder');
                input.set('value', placeholder);
                input.addClass('__placeholder');

                if(!input.hasEvent('focus', placeholder_focus)){
                    input.addEvent('focus', placeholder_focus);
                }

                if(!input.hasEvent('blur', placeholder_blur)){
                    input.addEvent('blur', placeholder_blur);
                }

            }

        });

    }
}

function placeholder_focus(){

    var input = $(this);    

    if(input.get('class').contains('__placeholder') || input.get('value') == ''){
        input.removeClass('__placeholder');
        input.set('value', '');
    }

}

function placeholder_blur(){

    var input = $(this);    

    if(input.get('value') == ''){
        input.addClass('__placeholder');
        input.set('value', input.get('placeholder'));
    }

}

我承认,它看起来比其他的要多一些,但是效果很好。 __占位符是ccs类,用于使占位符文本的颜色精美。

我在window.addEvent('domready',...中使用了fix_placeholder和其他添加的代码(如弹出窗口)中。

希望你喜欢。

亲切的问候。



0
<input type="text" name="Name" value="Name" onfocus="this.value = ''" onblur=" if(this.value = '') { value = 'Name'}" />

0

添加以下代码即可完成。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
    <script src="https://code.google.com/p/jquery-placeholder-js/source/browse/trunk/jquery.placeholder.1.3.min.js?r=6"></script>
    <script type="text/javascript">
        // Mock client code for testing purpose
        $(function(){
            // Client should be able to add another change event to the textfield
            $("input[name='input1']").blur(function(){ alert("Custom event triggered."); });    
            // Client should be able to set the field's styles, without affecting place holder
            $("textarea[name='input4']").css("color", "red");

            // Initialize placeholder
            $.Placeholder.init();

            // or try initialize with parameter
            //$.Placeholder.init({ color : 'rgb(255, 255, 0)' });

            // call this before form submit if you are submitting by JS
            //$.Placeholder.cleanBeforeSubmit();
        });
    </script>

https://code.google.com/p/jquery-placeholder-js/downloads/detail?name=jquery.placeholder.1.3.zip下载完整代码和演示。


0

这是一个javascript函数,它将为IE 8及以下版本创建占位符,并且也适用于密码:

/* Function to add placeholders to form elements on IE 8 and below */
function add_placeholders(fm) {	
	for (var e = 0; e < document.fm.elements.length; e++) {
		if (fm.elements[e].placeholder != undefined &&
		document.createElement("input").placeholder == undefined) { // IE 8 and below					
			fm.elements[e].style.background = "transparent";
			var el = document.createElement("span");
			el.innerHTML = fm.elements[e].placeholder;
			el.style.position = "absolute";
			el.style.padding = "2px;";
			el.style.zIndex = "-1";
			el.style.color = "#999999";
			fm.elements[e].parentNode.insertBefore(el, fm.elements[e]);
			fm.elements[e].onfocus = function() {
					this.style.background = "yellow";	
			}
			fm.elements[e].onblur = function() {
				if (this.value == "") this.style.background = "transparent";
				else this.style.background = "white";	
			}		
		} 
	}
}

add_placeholders(document.getElementById('fm'))
<form id="fm">
  <input type="text" name="email" placeholder="Email">
  <input type="password" name="password" placeholder="Password">
  <textarea name="description" placeholder="Description"></textarea>
</form>


-1
    <script>
        if ($.browser.msie) {
            $('input[placeholder]').each(function() {

                var input = $(this);

                $(input).val(input.attr('placeholder'));

                $(input).focus(function() {
                    if (input.val() == input.attr('placeholder')) {
                        input.val('');
                    }
                });

                $(input).blur(function() {
                    if (input.val() == '' || input.val() == input.attr('placeholder')) {
                        input.val(input.attr('placeholder'));
                    }
                });
            });
        }
        ;
    </script>

$ .browser.msie不再受支持。尝试改用特征检测。
调用
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.