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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не могу перехватить KeyCode клавиши "%" 
:(
    Опции темы
DeamonShan
Дата 1.9.2010, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

function onChangeOutPrice(e,el){
    var keycode = e.keyCode?e.keyCode:e.keyChar;
    if(keycode==53){
    var this_input=$(".tovar_list td input[name=out_price_ye["+$(el).parent().parent().attr('id')+"]]");
    var procent=parseFloat(this_input.val().replace(/%/g,''));
    var in_price_ye=parseFloat($(".tovar_list td input[name=in_price_ye["+$(el).parent().parent().attr('id')+"]]").val());
    this_input.val(Math.round((procent*in_price_ye/100+in_price_ye)*100)/100);
    }
}


Код

<table class="tovar_list">
<tr id="2">
<td><input name="in_price_ye[2]"></td>
<td><input name="out_price_ye[2]" onkeyup="onChangeOutPrice(evebt,this)"></td>
</tr>
</table>


по заложенным действиям в функцию onChangeOutPrice(), при вводе числа в поле out_price_ye[2] и при наборе в конца этого числа знака "%" в этом же поле должно высчитать тот процент, который вводился в это поле от значения поля in_price_ye[2] и приплюсовав к значению поля in_price_ye[2] присвоил в поле out_price_ye[2] результат вычислений.

Иначе говоря, если ввести в поле out_price_ye[2], например, 14%, то функция должна понять что высчитывается процентная ставка от поля in_price_ye[2], при этом отсекается знак "%" и делается вычисления. Если же символ "%" не был введен, то ничего не делать.

Для этого есть условие if(keycode==53).

Код корректно работает, если цифры вводить из доп. цыфровых клавиш с права (на калькуляторе), если же ввести с овновных клавишь цыфру 5, то функция не ждет символа "%" и сразу вычисляет. Как избежать такое поведение кода? проблема в 5-ке, и символом "%" который стоит над ним. с другими цыфрами все отлично.
PM MAIL   Вверх
Amphiluke
Дата 1.9.2010, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

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



Для начала исправить

Цитата(DeamonShan @  1.9.2010,  13:27 Найти цитируемый пост)
onkeyup="onChangeOutPrice(evebt,this)"



Цитата(DeamonShan @  1.9.2010,  13:27 Найти цитируемый пост)
e.keyChar

Такого свойства (keyChar) у объекта Event, вроде, нет.
Тут, мне кажется, излишне проверять определен ли атрибут keyCode. Он поддерживается всеми современными браузерами.

Итого:
Код

function onChangeOutPrice(e,el){
    if(e.keyCode==53 && e.shiftKey){
    ...

PM   Вверх
DeamonShan
Дата 2.9.2010, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Amphiluke, 

Код

function onChangeOutPrice(e,el){
    if(e.keyCode==53 && e.shiftKey) {
    var this_input=$(".tovar_list td input[name="+$(el).attr('name')+"]");
    var procent=parseFloat(this_input.val().replace(/%/g,''));
    var in_price_ye=parseFloat($(".tovar_list td input[name=in_price_ye["+$(el).parent().parent().attr('id')+"]]").val());
    this_input.val(Math.round((procent*in_price_ye/100+in_price_ye)*100)/100);
    }
}


Работает, но как-то странно ведет себя...

не всегда улавливает Shift. То есть надо сперва отпустить "5" а затем Shift в этом случае работает, а когда одновременно, то неработет.Условие (&& e.shiftKey) не выполняется...
PM MAIL   Вверх
ksnk
Дата 2.9.2010, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Обычно клавиатурные ловилки ставятся на onkeydown, и onkeypress тут уже пользователь должен заботится об наличии нажатого шифта. onkeyup - вызывается, когда клавиша поднимается вверх. 


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


 




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


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

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