Как вызвать возврат на текстовое поле? - PullRequest
14 голосов
/ 03 августа 2011

Скажите, у меня есть это:

<textarea id="myarea">Hello</textarea>

Как бы я мог инициировать возврат на этом текстовом поле, возможно, используя trigger () и коды клавиш Код для возврата - 8. И я не ищу этого:

$('#myarea').val( $("myarea").val().slice(0,-1) );

Мне нужно смоделировать кого-то, кто действительно нажимает клавишу Backspace на клавиатуре Спасибо

Ответы [ 3 ]

10 голосов
/ 03 августа 2011

Вы можете создать событие keydown:

var e = jQuery.Event("keydown", { keyCode: 20 });

Затем вызвать его в своей текстовой области:

$("#myarea").trigger( e );

Обновление:

После дополнительных исследований и тестированияЯ понимаю, что это решение НЕ имитирует естественное событие нажатия клавиши на элементе HTML.Этот метод только запускает событие keydown, он не копирует пользователя, входящего в элемент и нажимающего эту клавишу.

Чтобы имитировать переход пользователя в это текстовое поле и нажатие этой клавиши, вам нужно будет создать событие отправки

Событие отправки также не поддерживается глобально.Лучше всего было бы инициировать событие нажатия клавиш, а затем обновить текстовую область, как предполагалось.

6 голосов
/ 03 августа 2011

Я нашел это:

http://forum.jquery.com/topic/simulating-keypress-events (ответ № 2).

Нечто подобное должно работать или, по крайней мере, дать вам представление:

<div id="hola"></div>

$(function(){
    var press = jQuery.Event("keyup");
    press.ctrlKey = false;
    press.which = 40;

    $('#hola').keyup(function(e){
        alert(e.which);
    })
   .trigger(press); // Trigger the event
});

Демо: http://jsfiddle.net/qtPcF/1/

1 голос
/ 03 декабря 2017

Вы не должны форсировать ключевые события в js. Попробуйте вместо этого смоделировать удаление персонажа.

const start = textarea.selectionStart - 1;
const value = textarea.value;
const newValue = value.substr(0, start) + a.substr(start);
textarea.value = newValue;

Или, если вы просто хотите событие, вместо этого вызывайте обработчик напрямую, а не форсируйте событие. Это слишком глупо.

...