Как вызвать backspace в текстовом поле?

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

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

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

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

Мне нужно смоделировать, как кто-то на самом деле нажимает клавишу «возврат» на клавиатуре. Спасибо


person odle    schedule 03.08.2011    source источник
comment
Вы имеете в виду, что, когда он пытался ввести его, удалить или когда он нажимал кнопку сброса или что-то еще, текст стирался в обратном порядке?   -  person Warface    schedule 03.08.2011


Ответы (3)


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

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

Затем запустите его в текстовом поле:

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

Обновлять:

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

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

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

person rkw    schedule 03.08.2011
comment
Вы не делаете ничего плохого. Прочтите обновленный пост для получения дополнительной информации - person rkw; 03.08.2011

Я нашел это:

http://forum.jquery.com/topic/simulatory-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
});

Demo: http://jsfiddle.net/qtPcF/1/

person Jose Adrian    schedule 03.08.2011

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

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

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

person Gibolt    schedule 03.12.2017