2016-01-30 3 views
0

EDIT: JSFiddleJavascript: Извлечь из раскрывающегося меню без JQuery?

Я не уверен, как подойти к этому. Я не хочу использовать лишнее количество идентификаторов или классов.

У меня есть раскрывающееся меню, которое содержит параметры для изменения скорости отображения быстрых слов в текстовом поле в реальном времени. Я попытался получить доступ к тому, какая опция выбрана, и значение в миллисекундах через функцию getTextSpeed.

Эта функция используется в функции runDisplay, которая принимает заданный набор слов из текста ввода и отображает их по одному слову за раз, которые располагаются в шахматном порядке на миллисекунды, заданные getTextSpeed.

Это, похоже, не работает. getTextSpeed, похоже, не возвращает значение, поэтому я предполагаю, что setInterval() работает по умолчанию.

Я делаю это неправильно? По моему мнению, это должно сработать. Я пытаюсь получить значение, а не текст, а значение - число. В консоли нет сообщений об ошибках, только никаких заметных изменений при попытке изменить параметры скорости при запуске веб-страницы.

<fieldset> 
      <p>Speed</p> 
      <select id="speed"> 
       <option value="300">200 wpm</option> 
       <option value="200">300 wpm</option> 
       <option value="171" selected="selected">350 wpm</option> 
       <option value="150">400 wpm</option> 
       <option value="133">450 wpm</option> 
       <option value="120">500 wpm</option> 
      </select> 
     </fieldset> 

function getTextSpeed() { 
    var speeds = document.getElementById("speed"); 
    return speeds.options[speed.selectedIndex].value; 
} 

function start() { 
    var text = document.getElementById("words").value; 
    var list = text.split(/\s+/); 
    runDisplay(list, "display") 
} 

function runDisplay(data, id) { 
     var reader = document.getElementById(id); 
     var index = 0; 
     var textSpeed = getTextSpeed(); 
     if (timer) { 
      clearInterval(timer); 
     } 
     if (data.length) { 
      timer = setInterval(function() { 
      reader.innerHTML = data[index++]; 
      index = index % data.length; 
      }, textSpeed); 
     } 
    } 
+0

Что может быть '# words' и' # display' находиться на вашей разметке? Кроме того, как вы запускаете 'start()'? – MinusFour

+0

'# words' - это поле' textarea', в котором пользователь может вводить некоторый текст. '# display' - это' div', который отображает слова. – user3450277

+0

'timer' не определен нигде, поэтому он там не сработает, кроме этого я не вижу никакой ошибки. – MinusFour

ответ

0

Вы попробовали так?

function getTextSpeed() { 
    var speeds = document.getElementById("speed").value; 
    return speeds; 
} 
+0

Я не знаю, будет ли это работать, поскольку я не вижу, как он будет извлекать значение определенной опции, которая была проверена. – user3450277

+0

Я просто попробовал; кажется, что это делает так, что нет никакой задержки вообще. Полученная задержка, по-видимому, близка к 0. – user3450277

+0

попытается утешить выход этого, т.е. console.log (document.getElementById («скорость»). Значение;). Какую ценность вы получаете? – Nijeesh

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