2010-10-14 15 views
47

Sto cercando di scrivere un semplice segnaposto plugin jQuery per un sito di mine, ma ovviamente ho solo voglia di sparare la funzione se l'attributo nativo segnaposto non è supportato ...Come verificare se il browser supporta l'attributo placeholder nativo?

Come posso utilizzare jQuery per testare per supporto nativo dell'attributo segnaposto?

+0

Grazie per il collegamento. Risorsa eccellente – Jannis

+2

Il link fornito da @hellvinz purtroppo è andato via 410. Ecco un mirror aggiornato: http://diveinto.html5doctor.com/detect.html#input-placeholder – Binarytales

risposta

93

è possibile aggiungere al $.support abbastanza facilmente inserendo questo nella parte superiore del Javascript che hai scritto:

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

È quindi possibile utilizzare sia $.support.placeholder o jQuery.support.placeholder qualsiasi punto del codice.

NB Questo codice è stato adattato da diveintohtml5, il collegamento fornito da Hellvinz sopra.

+0

Questo è brillante ed esattamente quello che stavo cercando. Grazie. PS: Grazie per il link, ottima risorsa. * Segnalato! * – Jannis

+0

Grazie hellvinz, non io, per il link! Inoltre, sarebbe banale creare un plugin che importi tutti i test di Modernizr in '$ .support'. Un rapido test rivela che sarebbe stato un file 11kb una volta ridotto. – lonesomeday

+0

anche se tutto ciò che voglio testare è la funzionalità del modulo? – Jannis

15

utilizzare la libreria Modernizr, che potete trovare qui: http://www.modernizr.com/

e poi fare questo:

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

Modernizr è davvero a portata di mano per testare il supporto del browser per quasi tutte le funzionalità HTML5.

+0

Grazie per la risposta. Sto già usando Modernizr nel mio documento, tuttavia, per far funzionare questo plugin su tutti i siti, non voglio fare affidamento su librerie esterne come Modernizr tranne jQuery, naturalmente. Nella mia pagina corrente che sto creando questo funziona davvero bene, ma solo per compatibilità generale preferirei qualcosa che non dipende da Modernizr. – Jannis

3

La proprietà placeholder esiste negli oggetti DOM INPUT in tutti i browser indipendentemente dal fatto che l'attributo segnaposto sia stato definito sull'elemento HTML INPUT.

Il modo corretto è:

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

mi piace avere una classe così semplice ...

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

... in modo da poter facilmente controllare se il browser supporta l'attributo segnaposto.

if (Browser.Can.Placeholder()) { 

} 
+2

Non abbastanza jQuery. – twistedpixel

+0

@twistedpixel - È uno scherzo, vero? – WoIIe

+4

@Wolle $ ('# yourComment'). Dopo ('Sì') – twistedpixel

Problemi correlati