Отмена события нажатия клавиши с помощью функции обработчика (функция addEventListener)

#javascript #dom

#javascript #dom

Вопрос:

Я хотел бы создать тестовую функцию, которая изменит символ ‘.’ на символ ‘,’ в текстовом поле. Я не могу изменить серверную часть, поскольку это документ Google. ‘56.3’ рассматривается как число, но ‘56,3’ равно (!).

Допустим, я использовал приведенный ниже код :

 function changeValue(e) {
    e = window.event || e;
    var keyCode = e.charCode || e.keyCode;
    if (String.fromCharCode(keyCode)==='.') {
          event.target.value =",";
          return false;
    }
    return true;
}

function start_up () {
    console.log('Start');
    var tmp = document.getElementById('ss-form');
    tmp = tmp.getElementsByTagName('input');
    console.log(tmp);
    for(var i=0; i<tmp.length; i  ) {
            tmp[i].addEventListener('keypress',changeValue, false); 
            console.log(i, tmp[i]);
    }
};

window.addEventListener("load",start_up, false);
  

Тогда проблема в том, что в поле добавляются оба ‘,’ и ‘.’. Как я могу отменить событие нажатия ‘.’? Как я могу заменить событие нажатия ‘.’ на событие нажатия ‘,’?

Я искал в Интернете и не вижу решения с помощью функции addEventListener.

Ответ №1:

Использование e.preventDefault() должно сделать это.

Я собрал демонстрационную версию jsFiddle: http://jsfiddle.net/yrYH4 /

Ответ №2:

Это может быть связано с тем, что вы возвращаете true из обработчика событий.

Вы можете использовать event.preventDefault или return false для предотвращения выполнения действий по умолчанию — вы возвращаете false из внутреннего оператора if вашего обработчика, а затем возвращаете true из функции main.

Комментарии:

1. Вызов return внутри оператора if выводит вас из функции, а не только из оператора if .