Как начать выделение с JavaScript на основе пользовательского ввода? - PullRequest
1 голос
/ 18 марта 2010

Я пытаюсь использовать 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>

Ответы [ 3 ]

4 голосов
/ 18 марта 2010

Ваш JavaScript имеет несколько проблем.

  1. Вы передаете неопределенную переменную namebox в getElementById. Вы должны поместить это в кавычки ('namebox').
  2. Вам нужно проверить значение text по пустой строке, а не null.
  3. Вам необходимо использовать значение ввода (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!!!");
  }
} 

Некоторые другие общие предложения:

  1. Не используйте document.write. Вместо этого используйте методы DOM, чтобы создать новый элемент и вставить его в DOM.
  2. Используйте ненавязчивый JavaScript. Прикрепите свое поведение после загрузки документа вместо использования встроенных обработчиков событий.
  3. Используйте === и !== для условий, позволяющих избежать принуждения к типу и гарантирующих, что вы получите результат, который вы считаете ожидаемым.
  4. Никогда, никогда не используйте marquee.
1 голос
/ 18 марта 2010

Вы, вероятно, не хотите использовать document.write для этого - используйте document.createElement('marquee') для создания элемента, а затем добавьте его в тело страницы. Вы можете установить такие атрибуты, как направление, для элемента, который вы возвращаете, и установить его innerHTML для текста, который вы хотите в области выделения.

(P.S. Marquee? Действительно?)

1 голос
/ 18 марта 2010
var text = document.getElementById(namebox).value;
...