использование innerHTML с

#javascript #html

#javascript #HTML

Вопрос:

Я пытаюсь использовать метод innerHTML для тега ввода, и все, что я получаю в ответ, это пустую строку. Вот код, который я использую.

javascript

 function setName(ID){
    document.getElementById('searchtitle').innerHTML = "Enter "   ID.innerHTML;
}
  

HTML

 <input type="radio" name="searchtype" id="test" value="name" onclick="setName(this)">Last Name</input><br/>
<input type="radio" name="searchtype" value="phonenumber" onclick="setName(this)">Phone Number</input><br/>

<label for="inputfield" id="searchtitle" style="font-size:2em;">Enter Last Name</label><br/>
<input type="text" name="inputfield" id="inputfield" style="font-size:2em;"></input>
  

То, что должно произойти, зависит от того, какой переключатель я выбираю, метка для поля ввода должна измениться. Я могу создать label.innerHTML=radio.value, но значения названы по моему php-коду и не оформлены должным образом (т. Е. номер телефона против Номер телефона) вот почему я пытаюсь использовать innerHTML переключателя.

Любая помощь, которую я мог бы получить, была бы высоко оценена.

Ответ №1:

вы должны встроить input внутрь label тега. входной тег должен закрываться на /> . Это семантический HTML. Когда вы делаете это, щелчок по ярлыку активирует ввод. Тогда innerHTML работает только для label. Он вернет вам значение метки.

 <label for="inputfield" id="searchtitle" style="font-size:2em;">Enter Last Name
    <input type="text" name="inputfield" id="inputfield" style="font-size:2em;" />
</label>
  

JavaScript:

 console.log(document.getElementById('searchtitle').innerHTML); // returns 'Enter Last Name'
  

Ответ №2:

Если вам нужно значение входного тега, вы хотите использовать .value .

Комментарии:

1. Я не думаю, что он пытается получить значение тега, а скорее метку входных данных. То есть нажатие переключателей должно изменить заголовок его поиска на «Введите фамилию» или «Введите номер телефона». Использование значения даст вам «Введите фамилию» и «Введите номер телефона».

2. Если я использую .value, я получаю phonenumber или name, которые являются значениями, которые я установил. Я пытаюсь получить доступ к тексту между <input> и </input>

Ответ №3:

Сначала добавьте метки вокруг ваших входных данных. Во-вторых, используйте getName(this.parentNode). Наконец, вызовите innerText вместо innerHTML.

 <html>
<head>
<script>
function setName(el){
    document.getElementById('searchtitle').innerHTML = "Enter "   el.innerText;
}
</script>
</head>
<body>
<label><input type="radio" name="searchtype" value="name" onclick="setName(this.parentNode)"/>Last 

Name</label><br/>
<label><input type="radio" name="searchtype" value="phonenumber" onclick="setName(this.parentNode)"/>Phone 

Number</label><br/>

<label for="inputfield" id="searchtitle" style="font-size:2em;">Enter Last Name</label><br/>
<input type="text" name="inputfield" id="inputfield" style="font-size:2em;"></input>
</body>
</html>
  

Комментарии:

1. проблема в том, что он пытается получить innerHTML входных данных, когда ему действительно нужно значение.

2. Нет, я думаю, ему действительно нужен innerHTML для ВВОДА, потому что он хочет, чтобы текст в его searchtitle соответствовал меткам его переключателей.

3. приятно, что работает. Я все еще хотел бы знать, почему innerHTML не работает, но, что ж, я могу это сделать, установив идентификатор.

4. На самом деле, это все еще не решает проблему, потому что цель состоит в том, чтобы получить this . Вы хотели бы получить этот родительский файл.

5. Хорошо, label this.parentNode innerText. Я думаю, что теоретически ввод не содержит innerHTML или innerText и что браузер преобразует его в <label><input />Label</label> внутренне.

Ответ №4:


Завершите редактирование.

Хорошо, я понял, что вы искали. Прежде всего, вы должны исправить свой HTML (не помещайте текст внутри ввода … и не добавляйте следующий ввод внутри метки).

 <label for="test">Last Name</label>
<input type="radio" name="searchtype" id="test" value="name" onclick="setName(this)" />
<br/>
<label for="test2">Phone Number</label>
<input type="radio" id="test2" name="searchtype" value="phonenumber" onclick="setName(this)" />
<br/>
<label for="inputfield" id="searchtitle" style="font-size:2em;">Enter Last Name</label>
<br/>
<input type="text" name="inputfield" id="inputfield" style="font-size:2em;" />
  

JavaScript (в Jquery, для краткости):

 function setName(elem)
{
    $('#searchtitle').html('Enter '   $('label[for="' elem.id '"]').html());
}
  

Комментарии:

1. ID — это переменная, равная объекту переключателя, она передается при использовании слова «this». Я мог бы использовать setName (‘Фамилия’), а затем getElementById (идентификатор).

2. Да, извините. Я уже заметил это и отредактировал сам код, но забыл отредактировать аннотацию.

3. Хорошо, теперь я знаю, что вы ищете (я думаю), и соответствующим образом обновил свой ответ.

4. Я вижу, что я помещаю текст в <input> вместо <label> . Интересно, мог бы я вызвать setName (this.previousSibling) и получить innerHTML <label>? (или что-то в этом роде, я думаю, что есть метод для предыдущего родственного)

5. Нет… Что делает этот код, так это извлекает HTML-код метки, атрибут которой FOR равен идентификатору ввода (именно так работают метки). Поскольку атрибут FOR обычно уникален для элемента управления, с которым он связан, это является хорошим решением для селектора атрибутов. Оттуда он объединяет его со строкой и помещает в HTML вашего именованного ярлыка (searchtitle).

Ответ №5:

Вы Input tag неправильно закрыли с </input> , это должно быть

 <input type="radio" name="searchtype" id="test" value="name" onclick="setName(this)"/>Last Name<br/>

<input type="radio" name="searchtype" value="phonenumber" onclick="setName(this)"/>Phone Number<br/>
  

Комментарии:

1. Это формат XHTML — я полагаю, он больше не является стандартным в HTML5?

2. Я этого не знал. возможно, это моя проблема. Возможно, у <input> нет innerHTML. Мне нужно будет разобраться с этим.

3. Нет, это не должно иметь значения, ваш браузер должен проанализировать его в любом случае (обратная совместимость), но это не решит вашу проблему. Я думаю, вы правы, у этого ввода нет innerHTML. Что также означает, что вы можете удалить эти теги </input> в своем коде.