tldr: ¿Por qué ('marcador de posición' en inputElemnt) es verdadero en IE8 a pesar de que no hay soporte nativo para el atributo marcador de posición? ¿No es (atributo en el elemento) una buena forma de verificar el soporte nativo? La biblioteca Javascript lo usa el modernizador.Javascript check para soporte de marcador nativo en IE8
larga: que tiene un pequeño plugin de jQuery llamado defaultValue (http://unwrongest.com/projects/defaultvalue/). Tengo un pequeño plugin de Jquery llamado Placeholder (https://github.com/janjarfalk/jquery.placeholder.js). Básicamente es una alternativa para el atributo de marcador de posición HTML5.
En una actualización reciente agregué estas tres líneas de código. Esperando que Defaultvalue no se ejecute si el navegador tiene soporte nativo para el atributo marcador de posición.
if('placeholder' in this){ // this is an input-element return false; }
Parece que funciona en la mayoría de los navegadores excepto IE8 e IE7. Por alguna razón, encuentra la clave 'marcador de posición' en esto, pero no hay, creo, ningún soporte para el atributo marcador de posición en IE7/IE8.
Mi código está inspirado en este código en la biblioteca Javascript Modernizer (http://www.modernizr.com/).
(function(props) { for (var i = 0, len = props.length; i < len; i++) { attrs[ props[i] ] = !!(props[i] in inputElem); } return attrs; })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' '));
¿Qué me falta?
IE no tiene ni idea acerca de los atributos y propiedades, se piensa que son lo mismo (como lo hace jQuery). Los atributos no estándar se agregan como propiedades "expando". Usar for..in para iterar sobre las propiedades de los objetos host no es una buena idea. IE <9 no es compatible con hasAttribute, por lo que tampoco funcionará. – RobG
Gracias! Su comentario condujo a una solución de trabajo. – janjarfalk
El atributo de marcador de posición no está implementado en IE9 tampoco ... –