2012-10-20 12 views
5

C'è un modo per aggiungere un attributo segnaposto (tag segnaposto, non "valore predefinito" e approcci simili) se si dispone di un campo di immissione testo con proprietà "valore" vuoto?Come aggiungere un attributo segnaposto se il campo "valore" è vuoto

Ho visto molte domande simili qui, ma la maggior parte di esse usa valore predefinito. Ho bisogno di tag segnaposto e inoltre non posso influenzare affatto l'output HTML.

Questo è l'esempio dato output HTML:

<input type="text" value="" name="textbox" id="edit-textbox"> 
+0

http://jsfiddle.net/gT7dv/ –

+0

@RPM Sarebbe troppo semplice, no? :) Ho scritto che non posso influenzare l'output HTML. Questo è il codice che ho e devo aggiungere l'attributo placeholder con jQuery – take2

+0

Non influenza affatto l'output HTML (tranne che aggiungendo il segnaposto, che è quello che ti serve, non è vero ??)! Ma ricorda che è per HTML 5! – Robyflc

risposta

11

io suggerirei di uno qualsiasi dei seguenti approcci:

$('input:text').each(
    function(i,el) { 
     if (!el.value || el.value == '') { 
      el.placeholder = 'placeholdertext'; 
      /* or: 
      el.placeholder = $('label[for=' + el.id + ']').text(); 
      */ 
     } 
    }); 

JS Fiddle demo using el.placeholder = 'placeholdertext'.

JS Fiddle demo using el.placeholder = $('label[for=' + el.id + ']').text().

Oppure si potrebbe usare un array per memorizzare i vari segnaposti:

var placeholders = ['Email address', 'favourite color']; 

$('input:text').each(
    function(i,el) { 
     if (!el.value || el.value == '') { 
      el.placeholder = placeholders[i]; 
     } 
    });​ 

JS Fiddle demo.

Per specificare un particolare segnaposto per un elemento particolare:

var placeholders = { 
    'one' : 'Email address', 
    'two' : 'Favourite color' 
}; 

$('input:text').each(
    function(i,el) { 
     if (!el.value || el.value == '') { 
      el.placeholder = placeholders[el.id]; 
     } 
    });​ 

JS Fiddle demo.

Aggiunto un catch/ripiego nel caso in cui una voce non esiste nei i segnaposto oggetto per un particolare input:

var placeholders = { 
    'oe' : 'Email address', // <-- deliberate typo over there 
    'two' : 'Favourite color' 
}; 

$('input:text').each(
    function(i,el) { 
     if (!el.value || el.value == '') { 
      el.placeholder = placeholders[el.id] || ''; 
     } 
    });​ 

JS Fiddle demo.

+0

Ho provato con entrambi i suggerimenti, ma non ha funzionato ... puoi controllare il violino qui: http://jsfiddle.net/U2YZx – take2

+0

Devi avere un elemento etichetta con cui lavorare in quel codice. Non ne hai uno, quindi non funziona. –

+0

Brillante, grazie! Una domanda su questo codice però - come si fa riferimento a quale casella di testo dovrebbe essere influenzata, i. e. come posso indirizzare la casella di input esatta (con #textbox in questo caso)? – take2

4

Se stai usando HTML5 (e si dovrebbe) c'è un attributo nativo segnaposto.

<input type="text" value="" placeholder="My placeholder!" name="textbox" id="edit-textbox"> 

Modifica

Come hai detto che non è possibile modificare il codice HTML e devono usare JS, questo può aiutare.

$ ('# edit-textbox'). Attr ('segnaposto', 'Il mio segnaposto!');

Ancora una volta, questo è per HTML 5.

+0

Anche questo funziona, grazie! David è stato il primo, quindi ho accettato la sua risposta. – take2

+0

Ok! Basta notare che le nostre risposte sono assolutamente diverse e portano a cose diverse. La tua domanda era: "Come aggiungere un attributo segnaposto" e l'impostazione di un attributo valore (come nella sua risposta) non è assolutamente la stessa. – Robyflc

+0

Ho controllato il suo codice con firebug e il testo segnaposto viene visualizzato come attributo segnaposto, quindi sarebbe la risposta alla mia domanda. – take2

0
(function($) { 

    $('#edit-textbox').attr('placeholder','Your placeholder text'); 

})(jQuery); 
Problemi correlati