Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Событие при нажатии на клавиши (https://javascript.ru/forum/dom-window/51427-sobytie-pri-nazhatii-na-klavishi.html)

sloyi 06.11.2014 14:07

Событие при нажатии на клавиши
 
Всем привет подскажите пожалуйста
есть следущий код


//событие при нажатии
$(".cod").keyup(function(){
//достаем все что написанно в инпуте
	symvols = document.querySelector('.cod').value;


//следущая строка убирает все символы кроме цифр. т.к. в инпут подцепленна маска типа (999-999-999)
	str_int_sym = parseInt(symvols.replace(/\D/g,''));
//переводим в стринг для того чтоб можно было подсчитать кол-во символов
	str_int_sym = String(str_int_sym) ;
// если 9 символов ввели то мы выводим привет
	if(str_int_sym.length == 9)
		{
		alert('Привет');
		}
});


Проблема следущая. когда мы вводим все 9 символов и еще несколько раз жмем на цифру то он открывает столько лишних алертов сколько раз мы нажали лишний раз цифру. И это все понятно т.к. событие идет на нажатии клавиши. а раз нажали и и символов ровно 9 то выполняем . нажал еще раз опять 9 значит выполним еще раз ))))). Но как можно справиься как его застопорить можно после того как ввели 9 цифр. ребят спасайте мозг ломаю придумать не могу. Какие будут предложения?

kostyanet 06.11.2014 22:01

Значит всегда == 9.

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

Вот такая есть рега для вашего случая

([0-9][ ()+-]*){9}$

пишите ее в pattern инпута

if(input.pattern && !new RegExp(input.pattern).test(input.value))
  throw 'Х нанэ, тут не 9 цифр!';
else
 alert('Привет');

kostyanet 06.11.2014 22:03

Да, он цифры считает, но позволяет вводить еще ()+- - для номеров телефонов то есть рега. Нормально вот такая

([0-9][ ()+-]*){10,11}$

потому что в федеральном 10, а со страной 11

sloyi 07.11.2014 08:54

не не ребят не для номеров. для карт например карта с номером 100-000-000

sloyi 07.11.2014 08:56

цифры считаю потому что в данном инпуте есть маска которая содержит следущие символы

___-___-___

поэтому чразу все символы считать не могу так как их сразу 11 идет и хоть сколько вводи их всегда будет 11. поэтому мне нужно сначала достать значение value инпута затем убрать все символы кроме цифр(т.к. вводить можно только цифры) и уже потом их подсчитать сколько их но для этого их нужно конвертировать в стринг далее идет подсчет

sloyi 07.11.2014 08:59

а ваш код немного непонял(((( Видимо еще не достаточно скила =DDD. Если не сложно расскажите поподробнее только не говорите тип нуб рак говнокодер и все такое ))) сам ве знаю просто чуточку поподробнее и все заранее спасибо)))

Царь Леонид 07.11.2014 09:27

ОМГ, вот это каша из джикверей и джаваскриптов. Насколько я понял, нужно чтобы в строке не вводилось больше 9 символов? Накидайте ваш HTML в песочницу и киньте ссылку. А вообще, по хорошему надо посмотреть документацию маски

sloyi 07.11.2014 12:30

вы почти правильно поняли. Но вся проблема в том что там и так не вводиться больше девяти. так и остается 9 но событие срабатывает. т.е. в инпуте нечего не меняеться а событие все равно происходит с только раз сколько нажал лишнее

Царь Леонид 07.11.2014 13:49

я понял, т.е. надо, чтобы нажималось только 9 раз? Я бы примерно так сделал:
var arr=[];//создаем массив
      $('button').on('click', function(){
        if(arr.length>8){//проверяем длинну массива, если больше 9, return false
          return false}else{
        var s = $(this).val();//если нет заносим значение в массив и выполняем какие-то свои действия
        arr.push(s)
        console.log(arr.length)
          }
     	 });

ССылка на песочницу, просмотр в консоле :http://learn.javascript.ru/play/CN3wu

sloyi 07.11.2014 15:26

Подкоректировал и все стабильно работает большое спасибо))) Лови плюсик)

kostyanet 07.11.2014 20:46

Цитата:

Сообщение от sloyi
есть маска которая содержит следущие символы

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

Ну то есть почему грамотный человек не может ввести 123-456-987 используя пробелы и черточки?

Другими словами надо понимать что когда вы пытаетесь отупить другого, то всегда есть кто-то другой кто вас уже отупил.


Часовой пояс GMT +3, время: 23:38.