Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Не могу перехватить KeyCode клавиши "%"


Автор: DeamonShan 1.9.2010, 09:27
Код

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-ке, и символом "%" который стоит над ним. с другими цыфрами все отлично.

Автор: Amphiluke 1.9.2010, 14:01
Для начала исправить

Цитата(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){
    ...

Автор: DeamonShan 2.9.2010, 10:41
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) не выполняется...

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)