2013-11-18 3 views
0

Я выполняю свой проект в IE 7, и я хочу знать, как получить значение ввода текста всякий раз, когда я нажимаю на ярлык перед ним.Как получить значение следующего ввода текста?

вот мой DOM:

<table> 
<tr> 
<td> 
<label id="lbl_name">Name:</label> 
</td> 
<td> 
<input type="text" id="name" /> 
</td> 
</tr> 
</table> 

Я попытался с помощью NextSibling, но я получаю пустое значение.

document.getElementById('lbl_name').attachEvent('onclick', function() { 
alert(document.activeElement.nextSibling.nodeValue); 
}); 

Любая помощь пожалуйста? Если вы можете поделиться своим кодом не-jquery способом. Спасибо

+1

Этот ярлык бесполезен. У него нет потомков, которые являются элементами управления или атрибутом. – Quentin

+0

Сначала верните свой HTML-код правильно: используйте атрибут «для» на ярлыке следующим образом: . Атрибут for должен указывать на идентификатор поля, к которому он принадлежит. Затем используйте метод, описанный здесь @Quentin. – koenpeters

+0

'label' использует вход' id' для подключения двух. Ваша «метка» также может быть «div» или «span». Однако, чтобы ответить на ваш вопрос, используйте родительский 'td'следующий дочерний' input' пользователя '. – DevlshOne

ответ

0

я изменил @ Кеннет ответ, и вот что сделал это работает:

document.getElementById('lbl_name').attachEvent('onclick', function() { alert(document.activeElement.nextSibling.children[0].value); 
}); 

document.activeElement является «ярлык», что я нажал на, nextSibling будет <td> тег, который содержит элемент <input> и children[0] - это <input type="text">. Добавив .value, он вернет текст внутри него.

спасибо, ребята, за все ваши входы = D

4

Вход не является родным братом. Чтобы использовать этот подход, вам потребуется:

  1. получить родительский узел (ТД)
  2. получить следующую родственную этот узел
  3. получить первый входной потомок этого узла

Однако на данный момент метка бесполезна, поскольку она вообще не связана с входом. Если исправить разметку:

<label id="lbl_name" for="name">Name:</label> 

Вы можете:

document.getElementById(this.getAttribute('for')).value 
+0

Для справки: 'this.htmlFor' должен возвращать то же значение, что и' this.getAttribute ('for') '. – cHao

+0

вот что я сделал после добавления for = "name" на метке: document.getElementById ('lbl_name'). AttachEvent ('onclick', function() { alert (document.getElementById (this.getAttribute ('for')) .value); }); но получаю ошибку «Объект не поддерживает это свойство или метод – itagomo

+0

У меня нет копии IE, поэтому я просто получаю * Некопаемое TypeError: Object # не имеет метода 'attachEvent' *, но если я используйте стандартный код, тогда [он отлично работает] (http://jsbin.com/uvUbOpu/1/). – Quentin

2

Это потому, что поле не является родственным.

Вы должны были бы подойти к родителю, к родному брату, а затем первым ребенок:

document.activeElement.parentNode.nextSibling.children[0]; 

То есть, если у вас нет текстовых узлов в период между

+0

Я сделал это, удалив 'parentNode'. Код: document.getElementById ('lbl_name'). attachEvent ('onclick', function() { alert (document.activeElement.nextSibling.children [0] .value); }); – itagomo

+0

У меня ничего не было с document.activeElement.parentNode.nextSibling.children [0] .value – itagomo

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