【问题标题】:How to trigger backspace on a textfield?如何在文本字段上触发退格?
【发布时间】:2025-12-11 23:25:01
【问题描述】:

说我有这个:

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

我将如何使用 trigger() 和键码在该文本区域上触发退格键。退格的代码是 8。 而且我不是在寻找这个:

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

我需要模拟某人实际按下键盘上的“退格”键。 谢谢

【问题讨论】:

  • 你的意思是当他试图键入它时删除或当他单击重置按钮或以退格方式擦除文本时?

标签: javascript jquery triggers keycode backspace


【解决方案1】:

你可以创建一个keydown事件:

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

然后在你的 textarea 中触发它:

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

更新:

在做了更多的研究和测试之后,我意识到这个解决方案确实NO模拟了 HTML 元素上的 natural 按键事件。此方法仅触发 keydown 事件,它不会复制用户进入元素并按下该键。

要模拟用户进入该文本框并按下该键,您必须创建一个dispatch event

dispatch 事件也不受全球支持。最好的办法是触发 keydown 事件,然后按预期更新文本区域。

【讨论】:

  • 你没有做错任何事。阅读更新后的帖子了解更多信息
【解决方案2】:

我发现了这个:

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/

【讨论】:

    【解决方案3】:

    不应该在 js 中强制执行关键事件。尝试模拟字符删除。

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

    或者,如果您只想要事件,请直接调用处理程序,而不是强制事件。这太hacky了。

    【讨论】: