2015-04-11 6 views
0
  1. У меня есть код, который предполагает, чтобы обновить число оставшихся символов осталось, когда пользователь в text input. Код запускается с использованием события keypress. Проблема заключается в том, что код запущен только после keypress. Почему это происходит?Javascript события нажатия клавиши и e.keycode

  2. У меня есть код, чтобы показать ключ ASCII кода, но символ всегда показывает 8 и показывает, когда я нажимаю забой. И как использовать метод String.fromCharCode(event.keycode} ;.

  3. Почему параметр event добавлен в function? Как e.keycode знает, что отображается keycode пользователя пользователя..

Пример кода

HTML

<div id="page"> 
    <h1>List King</h1> 
    <form id="messageForm"> 
    <h2>My profile</h2> 
    <textarea id="message"></textarea> 
    <div id="charactersLeft">180 characters</div> 
    <div id="lastKey"></div> 
    </form> 
</div> 

JavaScript

var el;             // Declare variables 

function charCount(e) {         // Declare function 
    var textEntered, charDisplay, counter, lastkey;   // Declare variables 
    textEntered = document.getElementById('message').value; // User's text 
    charDisplay = document.getElementById('charactersLeft'); // Counter element 
    counter = (180 - (textEntered.length));     // Num of chars left 
    charDisplay.textContent = counter;      // Show chars left 

    lastkey = document.getElementById('lastKey');   // Get last key used 
    lastkey.textContent = 'Last key in ASCII code: ' + e.keyCode; // Create msg 
} 

el = document.getElementById('message');     // Get msg element 
el.addEventListener('keypress', charCount, false);   // keypress -call charCount() 

ответ

1
  1. keypress события срабатывает, прежде чем значение на вход обновляется, вот почему счетчик не обновляется. Я бы посоветовал прослушать событие input, если вам не нужен keyCode. Вы также можете послушать keyup (но обновление не будет выполнено прямо) или комбинации keypress и keyup (с "How to get text of an input text box during onKeyPress?", я обновил правильный ответ fiddle).
    • На самом деле событие keypress, похоже, не срабатывает, когда вы нажимаете backspace. Было сказано, что другое решение игнорировать «приглушенные» клавиши («backspace», «shift», «command» и т. Д.) - это прослушивание события «ввода» (но у вас не будет доступа к event.keyCode). В противном случае вы также можете игнорировать свой код, если ключевой код не имеет значения.
    • Что касается String.fromCharCode, просто используйте String.fromCharCode(event.keyCode), чтобы получить «человеческий» эквивалент keyCode.
  2. event Переданный функции представляет собой объект, содержащий всю информацию об этом событии, включая нажатую клавишу.
+0

1-й вопрос не является проблемой, он работает с 'keyup', у вас есть определенная причина. Не говорите, что это происходит из другого места, покажите его в вашем коде. @ Gabin – CoDINGinDARK

+1

Я скопировал и вставил ваш код в [jsfiddle] (http://jsfiddle.net/yj1pj18o/). Откройте консоль и введите ввод. Как вы увидите, 'keypress' запускается каждый раз, когда вы нажимаете клавишу. – Gabin

+0

Я печатаю символ, который он не срабатывает, и следующий символ, который я набираю, загорается. В том смысле, что я набираю 1 символ, ничего не происходит. Затем я набираю другой символ (поэтому я набрал 2 символа) после того, как я набрал в своем втором символе событие огни и шоу (_180-1character_) осталось 179 символов вместо 178 символов. – CoDINGinDARK

1

1) Используйте 'KeyUp' InstEd из '' нажатием клавиши.

2) lastkey.textContent = 'Последняя клавиша в коде ASCII:' + String.fromCharCode (e.keyCode);

3) Не знаю много об этом. параметр события добавляется, чтобы поймать уволенное событие. Он имеет все свойства обожженного события, как для «KeyUp» он имеет «charcode», клавиатурный»,„ключ“и т.д.

+0

Ваш ответ сработал, пожалуйста, ответьте на мои другие два вопроса. – CoDINGinDARK

+0

Триггеры 'keyup', когда вы отпускаете ключ, чтобы счетчик не обновлялся во время его нажатия. – Gabin

Смежные вопросы