Как запустить выделение с помощью JavaScript на основе пользовательского ввода?
-
20-09-2019 - |
Вопрос
Я пытаюсь использовать JavaScript для запуска выделения, когда пользователь вводит свое имя в текстовое поле, а затем нажимает кнопку.У меня есть идея, как это сделать, но мой сценарий никогда не работает полностью.Любая помощь приветствуется!
Вот что у меня есть на данный момент:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script type="text/javascript">
function StartMarquee() {
var text = document.getElementById(namebox);
if (text != null) {
document.write("<marquee behavior='scroll' direction='right'>Hello " + text + "!</marquee>");
}
else {
alert("Enter your name first!!!");
}
}
</script>
</head>
<body>
<table style="margin:0px auto 0px auto;">
<tr><td>Enter your name!</td>
<td><input type="text" id="namebox"/></td>
<td><input type="button" value="Enter" onclick="StartMarquee()"/></td></tr>
</table>
</body>
</html>
Решение
У вашего JavaScript есть несколько проблем.
- Вы передаете неопределенную переменную
namebox
кgetElementById
.Это нужно взять в кавычки ('namebox'
). - Вам необходимо проверить значение
text
против пустой строки, а неnull
. - Вам нужно использовать значение ввода (
text.value
в отличие от простоtext
) в элементе, который вы создаете.
Вот как будет выглядеть ваш код с этими исправлениями:
function StartMarquee() {
var text = document.getElementById('namebox');
if (text.value !== '') {
document.write("<marquee behavior='scroll' direction='right'>Hello " + text.value + "!</marquee>");
}
else {
alert("Enter your name first!!!");
}
}
Еще несколько общих рекомендаций:
- Не используйте
document.write
.Вместо этого используйте методы DOM, чтобы создать новый элемент и вставить его в DOM. - Используйте ненавязчивый JavaScript.Прикрепите свое поведение после загрузки документа вместо использования встроенных обработчиков событий.
- Использовать
===
и!==
для условий, позволяющих избежать приведения типов и гарантировать, что вы получаете тот результат, о котором думаете. - Никогда, никогда не используйте
marquee
.
Другие советы
var text = document.getElementById(namebox).value;
Вы, вероятно, не хотите использовать document.write
для этого - используйте document.createElement('marquee')
чтобы создать элемент, а затем добавить его в тело страницы.Вы можете установить атрибуты, такие как направление, для элемента, который вы возвращаете, и установить его innerHTML
к тексту, который вы хотите в выделенной области.
(П.С.Шатер?Действительно?)