2013-08-22 18 views
9

Sto facendo una convalida con Jquery e ho bisogno di ottenere l'etichetta $ da ogni elemento con la propria etichetta. Ora l'alert() fornisce med [object object]. La cosa migliore per me qui è ottenere un avviso() con tutti i campi allineati che non sono compilati. E non un avviso() per ciascuno.Ottieni etichetta per il campo di immissione

Ecco un violino: http://jsfiddle.net/s7pYX/

Come si realizza?

HTML:

<div> 
<label for="txtName">Name</label> 
<input type="text" id="txtName" class="form-control" name="txtName"> 
</div> 

<div> 
<label for="txtEmail">E-mail</label> 
<input type="text" id="txtEmail" class="form-control" name="txtEmail"> 
</div> 

Jquery:

$('input').each(function(){ 
if ($(this).val() == '') { 

$element = $(this) 

var $label = $("label[for='"+$element.attr('id')+"']") 

alert($label)  

} 

}); 

Nel alert() mi aspetto che in questo modo "è necessario compilare: Nome, E-mail"

+0

E che cosa vi aspettate in allerta? –

+0

Nell'avviso() mi aspetto in questo modo "È necessario compilare: Nome, E-mail" – Kim

+0

Grazie! Ma è possibile organizzare tutta l'etichetta $ in un avviso() e non in un avviso() ciascuno? – Kim

risposta

19

Provare per avvisare i contenuti di $label, è possibile utilizzare .text() per questo

$('input').each(function(){ 
    var $element = $(this) 

    if ($element.val() == '') { 
     var $label = $("label[for='"+this.id+"']") 
     alert($label.text())  
    } 

}); 

Demo: Fiddle

Aggiornamento

var $labels = $("label[for]"); 
var empties = $('input').filter(function(){ 
    return $.trim($(this).val()) == '' 
}).map(function(){ 
    return $labels.filter('[for="'+this.id+'"]').text() 
}).get().join(', ') 

alert(empties) 

Demo: Fiddle

+0

Grazie, ce l'ha fatta! Ma come è possibile ottenere tutte le $ label in un alert()? – Kim

+0

@Kim vuoi tutti i valori 'lebal' il cui valore di input è vuoto in un singolo avviso? –

+0

@Kim controllare l'aggiornamento –

1

cercare di alert

alert($label.text()) 
1

perché tu sono l'invio di un object per la funzione di allarme, se si desidera ottenere il contenuto dell'etichetta selezionato si deve ottenere è html http://jsfiddle.net/s7pYX/2/

$('input').each(function(){ 
if ($(this).val() == '') { 

$element = $(this) 

var $label = $("label[for='"+$element.attr('id')+"']").html(); 

alert($label)  

} 

}); 
1

Invece di riga sottostante:

var $label = $("label[for='"+$element.attr('id')+"']" 

utilizzare il seguente codice:

var $label = $("label[for='"+$element.attr('id')+"']").text(); 

Hai trovato solo l'oggetto è necessario utilizzare la .html() o .text() a ottenere il testo all'interno del tag etichetta.

1

Scegli questa DEMO

$('input').each(function() { 
    if ($(this).val() == '') { 

     $element = $(this); 

     var label = $element.closest("div").find("label").text(); 

     alert(label) 

    } 

}); 
3

Prova

$('input').each(function(){ 
if ($(this).val() == '') { 

$element = $(this) 

var $label = $("label[for='"+$element.attr('id')+"']") 

alert("You need to fill :" + $label.text())  

} 

}); 

DEMO

Aggiornamento:

è possibile per organizzare tutte le $ label in un avviso() e non un alert() ciascuno?

var errorString =""; 
var isNeedToFill=false; 
$('input').each(function(){ 
if ($(this).val() == '') { 
isNeedToFill =true; 
$element = $(this) 

var $label = $("label[for='"+$element.attr('id')+"']"); 
    errorString += $label.text()+" "; 
} 
}); 
if(isNeedToFill){ 
alert("You need to fill :" +errorString); 
} 

DEMO

0

Questo non è un grande esempio, ma è possibile utilizzare la funzione di prev da jQuery che troverà l'etichetta precedente prima componente selezionato.

$(document).ready(function() { 

    $('input').each(function(){ 
     alert($(this).prev("label").html()) 
    }); 

}); 

JSFiddle: http://jsfiddle.net/gQnaM/

0
var response = ""; 
$('input').each(function(){ 
    if ($(this).val() == '') { 

    response += ", " + $('label[for="' + this.id + '"]').html(); 
    } 
}); 

alert(response.replace(", ", "You need to fill out: ")); 
Problemi correlati