2013-08-22 3 views
9

Я делаю проверку с помощью JQuery и должен получить метку $ от каждого элемента своей собственной меткой. Теперь alert() дает med [object object]. Самое лучшее для меня здесь - получить предупреждение() со всеми полями, которые не заполнены. И не предупреждение() для каждого.Получить ярлык для поля ввода

Вот скрипка: http://jsfiddle.net/s7pYX/

Как это достигается?

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)  

} 

}); 

В боевой готовности() Я ожидаю, как это "Вам нужно заполнить: Имя, E-почта"

+0

А что вы ожидали в боевой готовности? –

+0

В предупреждении() Я ожидаю, что это «вам нужно заполнить: Имя, E-mail» – Kim

+0

Спасибо! Но возможно ли организовать все метки $ в одном оповещении(), а не по одному предупреждению()? – Kim

ответ

19

Попытка предупредить содержание $label, вы можете использовать .text() для этого

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

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

}); 

Демо: Fiddle

Update

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) 

Демо: Fiddle

+0

Спасибо, что сделал! Но как это возможно получить все $ метки в одном alert()? – Kim

+0

@ Вы хотите, чтобы все значения 'lebal', чье входное значение пусто в одном сигнале? –

+0

@ Ким проверить обновление –

1

пытаются предупреждение

alert($label.text()) 
1

потому что вы отправляет object функции оповещения, если вы хотите, чтобы получить содержимое выбранной метки, вы должны получить его 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

Вместо ниже линии:

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

Используйте следующий код:

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

Вы получаете только объект, который нужно использовать .html() или .text() к получить текст внутри тега метки.

1

Проверить это DEMO

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

     $element = $(this); 

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

     alert(label) 

    } 

}); 
3

Попробуйте

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

$element = $(this) 

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

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

} 

}); 

DEMO

Update:

возможно упорядочить все метки $ в одном оповещении(), а не по одному предупреждению()?

Да

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

Это не большой пример, но вы можете использовать prev функцию из JQuery, которая найдет предыдущую этикетку перед выбранным компонентом.

$(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: "));