2010-10-14 15 views
47

Estoy intentando escribir un marcador de posición sencillo plugin de jQuery para un sitio de la mina, pero, por supuesto, sólo quiero disparar la función si no se admite el atributo marcador de posición nativa ...¿Cómo probar si el navegador admite el atributo marcador de posición nativo?

¿Cómo puedo usar jQuery para probar para el soporte nativo del atributo marcador de posición?

+0

Gracias por el enlace. Excelente recurso. – Jannis

+2

El enlace proporcionado por @hellvinz lamentablemente ahora se ha ido. Aquí hay un espejo actualizado: http://diveinto.html5doctor.com/detect.html#input-placeholder – Binarytales

Respuesta

93

se pueden agregar a $.support con bastante facilidad mediante la inserción de este en la parte superior del Javascript que has escrito:

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

A continuación, puede utilizar cualquiera $.support.placeholder o jQuery.support.placeholder cualquier parte del código.

NB Este código se adaptó de diveintohtml5, el enlace proporcionado por hellvinz arriba.

+0

Esto es brillante y exactamente lo que estaba buscando. Gracias. PD: Gracias por el enlace, gran recurso. * ¡Marcado como favorito! * – Jannis

+0

¡Gracias a hellvinz, no a mí, por el enlace! Además, sería trivial crear un complemento que importe todas las pruebas de Modernizr a '$ .support'. Una prueba rápida revela que sería un archivo de 11 kb una vez minimizado. – lonesomeday

+0

incluso si todo lo que quiero probar es la funcionalidad de la forma? – Jannis

15

utilizar la biblioteca Modernizr, que se puede encontrar aquí: http://www.modernizr.com/

y luego hacer esto:

if (Modernizr.input.placeholder) { 
    // your placeholder text should already be visible! 
} else { 
    // no placeholder support :(
    // fall back to a scripted solution 
} 

Modernizr es realmente útil para probar el apoyo del navegador para casi todas las funciones de HTML5.

+0

Gracias por su respuesta. Sin embargo, ya estoy usando Modernizr en mi documento para que este complemento funcione en todos los sitios en los que no deseo depender de ninguna biblioteca externa como Modernizr que no sea jQuery, por supuesto. En mi página actual que estoy construyendo esto, de hecho funciona muy bien, pero solo por compatibilidad general preferiría algo que no dependa de Modernizr. – Jannis

3

La propiedad placeholder existe en los objetos INPUT DOM en todos los navegadores independientemente de si el atributo de marcador de posición se ha definido o no en el elemento HTML INPUT.

La forma correcta es:

var Modernizr = {}; 
// Create the input element for various Web Forms feature tests. 
var inputElem = document.createElement('input'), attrs = {};  
Modernizr.input = (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(' ')); 

if(!Modernizr.input.placeholder) { 
    // Do something. 
} 
4

me gusta tener una clase tan simple ...

var Browser = { 
    Can: { 
    Placeholder: function() { 
     return 'placeholder' in document.createElement('input'); 
    } 
    } 
} 

... para que pueda comprobar fácilmente si su navegador soporta el atributo marcador de posición.

if (Browser.Can.Placeholder()) { 

} 
+2

No es suficiente jQuery. – twistedpixel

+0

@twistedpixel - Eso es una broma, ¿verdad? – WoIIe

+4

@Wolle $ ('# yourComment'). After ('Sí') – twistedpixel

Cuestiones relacionadas