如何在文本框中触发退格键?

16

假设我有这个:

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

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

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

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


你的意思是当他试图删除输入内容时,或者点击重置按钮时,文本会以回退的方式被擦除吗? - Warface
3个回答

15

您可以创建一个键盘按下事件:

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

然后在你的文本区域中触发它:

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

更新:

经过更多的研究和测试,我意识到这个解决方案并没有模拟HTML元素的自然按键事件。该方法仅触发了keydown事件,而无法复制用户进入元素并按下该键的操作。

要模拟用户进入文本框并按下该键,您需要创建一个分派事件

分派事件也不是全局支持的。您的最佳选择是触发keydown事件,然后按预期更新文本区域。


你没有做错任何事。阅读更新后的帖子以获取更多信息。 - rkw

8
我找到了这个链接:http://forum.jquery.com/topic/simulating-keypress-events(第二个回复)。
以下代码段可以起到类似作用,或者至少给你提供了一个思路:
<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

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

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

如果你只需要事件,那么直接调用处理程序即可,而不是强制执行事件。这种方法太过繁琐。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接