Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамический калькулятор, jQuery, keyCode 
:(
    Опции темы
Axiom
Дата 31.1.2011, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 31.1.2011

Репутация: нет
Всего: нет



Всем доброго!
Пишу скрипт следующего типа:
Юзер в input#num вводит какую-либо цифру. Скрипт автоматов выдирает её и множит, допустим на 2.
Код

$('#num').keypress(function(e) {
   var e = event || window.event;
   if(e.keyCode == 48 || e.keyCode == 57) {
      alert(parseInt($(this).val())*2);
   } else {
      return false;
   }
});

Когда ввожу число, то алерт выводит пустое значение. Но если ввести еще одно, то выводит предыдущее значение.
Подскажите в чем проблема. Почему так происходит?
PM MAIL   Вверх
ksnk
Дата 31.1.2011, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Цитата(Axiom @  31.1.2011,  15:52 Найти цитируемый пост)
Подскажите в чем проблема. Почему так происходит? 

потому что изменение в инпуте из которого читается значение еще не произошло. Так уж сложились обработчики событий.

Один из способов решения - отложить обработку вычисления на какое-то время
Код

$('#num').keypress(function(e) {
   var e = event || window.event;
   if(e.keyCode == 48 || e.keyCode == 57) {
      var me=$(this);
      setTimeout(function(){alert(parseInt(me.val())*2); me=null;},10);
   } else {
      return false;
   }
});


Другой способ - перенести вычисление на метод keyup.

а зачем там возвращается false?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Axiom
Дата 31.1.2011, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 31.1.2011

Репутация: нет
Всего: нет



Теперь почему-то вообще не работает. Даже алерта нет.
Пробовал и .keypress и .keyup.

Цитата(ksnk @  31.1.2011,  17:42 Найти цитируемый пост)
а зачем там возвращается false? 

Это я как-то на автомате. По сути этот блок можно пропустить...

Код

$('#num').keyup(function(event) {
   var e = event || window.event;
   if(e.keyCode == 48 || e.keyCode == 57) {
      var me=$(this);
      setTimeout(function(){alert(parseInt(me.val())*2); me=null;},10);
   }
});

Также пробовал без тайм-аута.

Есть, конечно, вариант через post-запрос скормить значение инпута, php:
Код

$('#num').keypress(function() {
   var val = $(this).val();
   $.post('proc.php', {num:val}, function(data) {
      alert(data);
   });
});


proc.php
Код

echo $_POST['num'];


Таким образом всё работает, но это страшный велосипед.  smile 

Это сообщение отредактировал(а) Axiom - 31.1.2011, 18:56
PM MAIL   Вверх
ksnk
Дата 31.1.2011, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



для jquery var e = event || window.event; тоже можно пропустить. Событие уже правильно оформлено и так.
   

Код

<input id="num" type=text>

<script src='jquery.js'></script>
<script>
$('#num').keypress(function(e) {
   if(e.keyCode == 48 || e.keyCode == 57) {
      var me=$(this);
      setTimeout(function(){alert(parseInt(me.val())*2); me=null;},10);
   } 
});
</script>


вот такое у меня исправно работет. Алерт есть.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Axiom
Дата 31.1.2011, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 31.1.2011

Репутация: нет
Всего: нет



Разобрался.
Обработчик .keypress привязывался к узлу input, до его появления в структуре dom.


ksnk
Спасибо  smile 
Твой последний пример и указал на мою ошибку. =)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0717 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.