2016-01-28 9 views
1

У меня возникла проблема с получением имени атрибута для первого пустого поля ввода. Не могу понять, почему он возвращает «неопределенный» каждый раз.Получить имя первого пустого поля ввода возвращает «undefined» (jquery)

<input type="text" name="test_1" value="not empty"> 
<input type="text" name="test_2"> 
<input type="text" name="test_3" value="not empty"> 
<input type="text" name="test_4"> 
<script>alert($('input[value=""]').first().attr("name"));</script> 

Большое спасибо за любую помощь.

ответ

4

Элемент, который вы ищете для цели, не имеет свойства value, поэтому нет элементов, соответствующих выбору селектора [value=""]. Вы должны включить этот атрибут, то код работает отлично:

<input type="text" name="test_1" value="not empty"> 
<input type="text" name="test_2" value=""> 
<input type="text" name="test_3" value="not empty"> 
<input type="text" name="test_4" value=""> 

Example fiddle

Если вы не хотите, чтобы изменить HTML (или не может изменить его), то вам нужно будет использовать filter() найти элементы, необходимые для свойства value, которое всегда доступно.

var $emptyVal = $('input').filter(function() { 
    return !this.value; 
}); 

alert($emptyVal.first().attr("name")) 

Example fiddle

+0

Большое спасибо, я человек под сомнение мой рассудок, есть объяснение, почему значение = «» не по умолчанию для ввода? и вы должны явно вставить его в тег? – egalegal

+0

Нет никаких атрибутов по умолчанию для любых элементов (хотя некоторые из них могут потребоваться для сохранения HTML-кода), тогда как свойства базового DOMElement всегда будут существовать, даже если они равны нулю. –

+0

Существует разница между 'value =" "и' value = null'. Если его там нет, то это не '' '', потому что его нет. –

4

Вы можете сделать это с помощью :not[value] как следующее.

alert($('input:not([value])').first().attr("name"));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" name="test_1" value="not empty"> 
 
<input type="text" name="test_2"> 
 
<input type="text" name="test_3" value="not empty"> 
 
<input type="text" name="test_4">

+0

спасибо alim Azim за решение, но я нашел ответ в другой строке кода от Rory – egalegal

+0

Добро пожаловать. Я думаю, что мой код проще других. @egalegal – Azim

+0

Да, это просто, но не работало в моем проекте, я буду помнить об этом, спасибо за ваше время и помощь – egalegal

Смежные вопросы