Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.11.2014, 20:47
Новичок на форуме
Отправить личное сообщение для jonrut Посмотреть профиль Найти все сообщения от jonrut
 
Регистрация: 21.11.2014
Сообщений: 6

addEventListener для input text
Доброго времени суток!
Проблема: например для кнопки button знаю как добавить addEventListener, а для поля input - нет.
Нужно создать массив, допустим var names = ["Петя", "Коля"].
Массив есть. Далее есть строка ввода <input type="text" id="input">.
input.value... с ним не могу разобраться или он здесь не нужен?
Нужно чтобы после ввода в input значения "Петя" срабатывала некая функция, а само поле очищалось от ввода.
Помогите, пожалуйста.
Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 21.11.2014, 22:54
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

<!DOCTYPE HTML>
<html>
  <head><meta charset="windows-1251" /> </head>
  <body>
 
<input type="text" id="input"> 
    <script>

input=document.querySelector("#input")
arr=[/petya/i, /vasya/i]
input.oninput=function(){if(arr[0].test(this.value)||arr[1].test(this.value)) this.value=""}

    </script>
  </body>
</html>

Если верхний регистр не нужен убери флаги, или можешь использовать простое сравнение строк
<!DOCTYPE HTML>
<html>
  <head><meta charset="windows-1251" /> </head>
  <body>
 
<input type="text" id="input"> 
<input type="text" id="input2"> 
    <script>

input=document.querySelector("#input")
arr=["Вася", "Петя", "петя", "вася"] // при вводе регистр имеет значение!!!
input.oninput=function(){if(arr[0]===this.value||arr[1]===this.value||arr[2]===this.value||arr[3]===this.value) this.value=""}// вариант 1

input2=document.querySelector("#input2")
isValue=function(word){
  for(var i in arr) if(arr[i]===word) return true
}
input2.oninput=function(){if(isValue(this.value)) this.value=""}//вариант 2
    </script>
  </body>
</html>

Последний раз редактировалось krutoy, 21.11.2014 в 23:33.
Ответить с цитированием
  #3 (permalink)  
Старый 21.11.2014, 23:45
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

принципе, с addEventListener это тоже вроде работает (тестил V8 и FF)
<!DOCTYPE HTML>
<html>
  <head><meta charset="windows-1251" /> </head>
  <body>
 
<input type="text" id="input"> 

    <script>
input=document.querySelector("#input")
arr=["Вася", "Петя", "петя", "вася"]
isValue=function(word){
  for(var i in arr) if(arr[i]===word) return true
}
input.addEventListener("input", function(){if(isValue(this.value)) this.value=""})
    </script>
  </body>
</html>
Ответить с цитированием
  #4 (permalink)  
Старый 22.11.2014, 00:30
Новичок на форуме
Отправить личное сообщение для jonrut Посмотреть профиль Найти все сообщения от jonrut
 
Регистрация: 21.11.2014
Сообщений: 6

Krutoy, выручайте, пожалуйста!
input=document.querySelector("#input")
arr=[/petya/i, /vasya/i]
input.oninput=function(){if(arr[0].test(this.value)||arr[1].test(this.value)) this.value=""this.value=""
functionAdd();
}

functionAdd(){
alert("Проблема");
}


Подскажите, пожалуйста, если нужно ввести 100 имен, их либо по очереди вводить в arr либо есть другой способ?
Код, что Вы прислали - подошел мне, кроме одного: в конце добавил функцию, допустим functionAdd. И эта функция срабатывает на ввод любой клавишы, не зависимо, есть ли эта буква в arr или нет.
Теперь при нажатии любой клавиши выскакивает алерт, а необходимо, чтобы алерт выскакивал после ввода одного из значений массива.
После чего поле должно очиститься и можно вводить другое значение из того же массива.
Спасибо.
Ответить с цитированием
  #5 (permalink)  
Старый 22.11.2014, 01:13
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

Сообщение от jonrut
их либо по очереди вводить в arr либо есть другой способ
Откуда имена беруться? Если просто вводить лишние скобки лень, можно
<!DOCTYPE HTML>
<html>
  <head><meta charset="windows-1251" /> </head>
  <body>
 
<input type="text" id="input"> 

    <script>

input=document.querySelector("#input")
arr="вася петя".split(" ")

isValue=function(word){
  for(var i in arr) { 
     var re=new RegExp(arr[i], "i")
     if(re.test(word)) return true
  }
}
 
Add=function Add(){
   alert("Проблема");
}


test=function(){
   if(isValue(this.value)) {this.value=""; Add()}
}

input.oninput=test

    </script>
  </body>
</html>

Последний раз редактировалось krutoy, 22.11.2014 в 01:36.
Ответить с цитированием
  #6 (permalink)  
Старый 23.11.2014, 11:23
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,719

Сообщение от jonrut
Подскажите, пожалуйста, если нужно ввести 100 имен, их либо по очереди вводить в arr либо есть другой способ?
Есть другой способ - список и поле при нем.

Для рендера тегов нужна готовая либа, ибо все уже давно написано.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
input text отображение value BaHTuc Общие вопросы Javascript 21 02.10.2015 16:18
Input text с предложением вариантов allanmiln Элементы интерфейса 14 18.06.2013 11:21
Как найти кол. элементов в диве? koeshiro Общие вопросы Javascript 17 07.12.2012 17:24
Вывод порядкового номера li в списке profxhtml Общие вопросы Javascript 4 13.04.2011 12:30
Разным элементам input - разное форматирование. Как? eclipse (X)HTML/CSS 1 25.10.2007 13:55