Ich mache eine Validierung mit Jquery und muss das $ -Label von jedem Element mit seinem eigenen Label erhalten. Jetzt gibt die Warnung () med [Objektobjekt] aus. Für mich ist es das Beste, eine Benachrichtigung () mit allen Feldern zu erhalten, die nicht ausgefüllt sind. Und keine Warnung () für jeden.
Hier ist eine Geige: http://jsfiddle.net/s7pYX/
Wie wird das erreicht?
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)
}
});
In der Warnung () erwarte ich folgendes "Sie müssen ausfüllen: Name, E-Mail"
Versuchen Sie, den Inhalt von $label
zu warnen, dazu können Sie .text () verwenden
$('input').each(function(){
var $element = $(this)
if ($element.val() == '') {
var $label = $("label[for='"+this.id+"']")
alert($label.text())
}
});
Demo: Fiddle
Aktualisieren
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
Versuchen
$('input').each(function(){
if ($(this).val() == '') {
$element = $(this)
var $label = $("label[for='"+$element.attr('id')+"']")
alert("You need to fill :" + $label.text())
}
});
Update:
ist es möglich, alle $ -Labels in einem Alert () und nicht in einem Alert () zu ordnen?
Ja
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);
}
versuchen zu alarmieren
alert($label.text())
weil Sie eine object
an die Benachrichtigungsfunktion senden, wenn Sie den Inhalt des ausgewählten Labels abrufen möchten, müssen Sie dessen html http://jsfiddle.net/s7pYX/2/
$('input').each(function(){
if ($(this).val() == '') {
$element = $(this)
var $label = $("label[for='"+$element.attr('id')+"']").html();
alert($label)
}
});
Statt unter der Zeile:
var $label = $("label[for='"+$element.attr('id')+"']"
Verwenden Sie den folgenden Code:
var $label = $("label[for='"+$element.attr('id')+"']").text();
Sie erhalten nur das Objekt, das Sie benötigen, um .html()
oder .text()
zu verwenden, um den Text im Label-Tag abzurufen.
Überprüfen Sie diese DEMO
$('input').each(function () {
if ($(this).val() == '') {
$element = $(this);
var label = $element.closest("div").find("label").text();
alert(label)
}
});
$('input').each( function() {
var $labels = $(this).labels();
$labels.each(function(index, element){
alert($(element));
});
});
var response = "";
$('input').each(function(){
if ($(this).val() == '') {
response += ", " + $('label[for="' + this.id + '"]').html();
}
});
alert(response.replace(", ", "You need to fill out: "));
Dies ist kein gutes Beispiel, aber Sie können die prev
-Funktion von jQuery verwenden, die das vorherige Label vor der ausgewählten Komponente findet.
$(document).ready( function() {
$('input').each(function(){
alert($(this).prev("label").html())
});
});
JSFiddle: http://jsfiddle.net/gQnaM/