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

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


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