简单的方法来检查是否支持占位符?

我想在我的代码中使用HTML5 "placeholder"属性,如果用户的浏览器支持它,否则只是在窗体顶部打印字段名称。 但我只想检查是否支持占位符,而不是用户使用的浏览器的版本/名称。

所以理想情况下,我想要做类似的事情

  <body> <script> if (placeholderIsNotSupported) { <b>Username</b>; } </script> <input type = "text" placeholder ="Username"> </body> 

除了我不确定的JavaScript位。 帮助表示赞赏!

 function placeholderIsSupported() { var test = document.createElement('input'); return ('placeholder' in test); } 

我用jQuery版本作为起点。 (只是在应得的地方提供信贷)

要不就:

 if (document.createElement("input").placeholder == undefined) { // Placeholder is not supported } 

如果您使用Modernizr,请快速捕捉以下内容:

 if(!Modernizr.input.placeholder){ ... } 

另一种不需要在内存中build立input元素的方法是GC'd:

 if ('placeholder' in HTMLInputElement.prototype) { ... } 

http://html5tutorial.info/html5-placeholder.php有代码来做到这一点。;

如果你已经使用jQuery,你不需要这样做。 有可用的占位符插件( http://plugins.jquery.com/plugin-tags/placeholder ),如果可能,将使用HTML5属性,如果不是,则使用Javascript进行模拟。

我正在尝试做同样的…在这里我写了这个

 if(!('placeholder'in document.createElement("input"))){ //... document.getElementById("element"). <-- rest of the code }} 

有了这个,你应该有一个ID来标识带有占位符的元素…我不知道这是否也帮助你识别只有当占位符不被支持的元素。

您好,这是一个老问题,但希望这可以帮助一个人。

该脚本将检查浏览器中占位符的兼容性,如果不兼容,则会使占位符的所有input字段都使用value =“”字段。 注意当提交表单时,如果没有input任何内容,它也会将input变回“”。

 // Add support for placeholders in all browsers var testInput = document.createElement('input'); testPlaceholderCompatibility = ('placeholder' in testInput); if (testPlaceholderCompatibility === false) { $('[placeholder]').load(function(){ var input = $(this); if (input.val() == '') { input.addClass('placeholder'); input.val(input.attr('placeholder')); } }); $('[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().parents('form').submit(function() { $(this).find('[placeholder]').each(function() { var input = $(this); if (input.val() == input.attr('placeholder')) { input.val(''); } }) }); } 

有点晚了,但如果你使用jQuery或AngularJS,你可以简化上面提到的方法,而不使用任何插件。

jQuery的

 typeof $('<input>')[0].placeholder == 'string' 

AngularJS

 typeof angular.element('<input>')[0].placeholder == 'string' 

这些检查非常相似,因为AngularJS在后台运行jQlite 。

注: 占位符不能在Internet Explorer中工作,它应该工作

 document.createElement("input").placeholder == undefined 

不工作在Internet Explorer 11 – document.createElement(“input”)。占位符返回空string


 var testInput = document.createElement('input'); testPlaceholderCompatibility = ('placeholder' in testInput); 

不工作在Internet Explorer 11 – 返回true


 'placeholder'in document.createElement("input") 

不工作在Internet Explorer 11 – 返回true


理论上,Internet Explorer 11应该支持占位符,但实际上 – 当input获取焦点占位符消失时。 在Chrome占位符显示,直到你实际上键入的东西,不pipe焦点。 所以,在这种情况下,function检测不起作用 – 您需要检测IE并显示标签。