У меня есть поле ввода, и я хочу сделать некоторые вычисления в зависимости от нажатия и нажатия клавиш. Я пытался использовать функции onkeyup и onkeydown, но когда я нажимаю клавишу на клавиатуре, в консоли печатается как «keyup», так и «keydown». Есть ли какая-либо другая функция, которая различает события keyup и keydown отдельно? Мои входные теги находятся внутри таблицы html. это мой код
$('table input').on('keyup', function(){
console.info("keyup");
});
$('table input').on('keydown', function(){
console.info("keydown");
});
Я пробовал. но это не работает. @Льюис
Нет причин, по которым этого не должно быть. Что-то еще не так с вашим кодом, если это не работает. Посмотрите документацию Клавиатурное событие на MDN.
@RhugvedaDesai Попробуйте использовать мой код ... Если он не работает, не могли бы вы попробовать создать минимальный воспроизводимый пример?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


изменить input на keyup:
$('table input').on('keyup', function(){
var parent = $(this).closest('tr');
var value = parent.find('[name = "item_value[]"]').val();
var amount = parent.find('[name = "quantity[]"]').val();
var total_cost = value * amount;
parent.find('[name = "total_cost[]"]').val(total_cost);
total_value = total_value + total_cost;
document.getElementById('total').value = total_value;
});
Подробнее о ключ
Предлагаю не смешивать jQuery и чистый JavaScript. Все, что вам нужно, это добавить keyup keydown вместо input:
$('table input').on('keyup keydown', function() {
var parent = $(this).closest('tr');
var value = parent.find('[name = "item_value[]"]').val();
var amount = parent.find('[name = "quantity[]"]').val();
var total_cost = value * amount;
parent.find('[name = "total_cost[]"]').val(total_cost);
total_value = total_value + total_cost;
$('#total').val(total_value);
});
JQuery — это JavaScript.
@JacobGaiski Я имел в виду способ ... Вы знаете, что я фанат JavaScript. ? Как лучше я мог объяснить это в своем ответе? Может быть, чтобы не отставать от манеры письма или что-то в этом роде? Или заменить это на Синтаксис jQuery и чистый синтаксис JavaScript?
@PraveenKumarPurushothaman Я думаю, вы говорили, что если они используют jQuery, они могут использовать его везде для согласованности, а не переключаться между использованием и неиспользованием. То есть, нет смысла смешивать .val() и .value.
Я обновил свой вопрос. Пожалуйста, проверьте! @PraveenKumarPurushothaman
@RhugvedaDesai Код, который вы отправили, действительно выполняется. Если бы вы смогли показать нам минимальный воспроизводимый пример, мы бы увидели, где что-то пойдет не так, например, селектор или что-то еще, так что...
Вам не нужны keyup и keydown, оба будут запускаться с одним и тем же кодом клавиши.
Вы должны использовать один или другой. Разница будет в задержке обработки.
Например, если вы используете KeyUp, в зависимости от времени, в течение которого клавиша удерживается нажатой, KeyUp сработает только после того, как эта клавиша будет отпущена, в отличие от KeyDown.
Ссылаясь на W3Schools, вы можете добиться этого с помощью: (Где код ключа = восьмеричное значение, определенное в ASCII (https://www.genuinecoder.com/wp-content/uploads/2012/07/asciifull.gif)
(Кроме того, запустив этот пример, вы заметите, что быстрые keyDowns и keyUps могут вызвать конфликты в процессе обработки. Вы должны использовать один или другой, а не оба одновременно.)
$("input").keyup(function(e){
alert(e.keyCode);
$("input").css("background-color", "pink");
});
$("input").keydown(function(e){
alert(e.keyCode);
$("input").css("background-color", "pink");
});
Изменить «ввод» на «keydown» или «keyup»?