说我有这个:
<textarea id="myarea">Hello</textarea>
我如何可能使用 trigger() 和键码在该文本区域上触发退格键。退格的代码是 8。我不是在寻找这个:
$('#myarea').val( $("myarea").val().slice(0,-1) );
我需要模拟某人实际按下键盘上的“退格”键。谢谢
说我有这个:
<textarea id="myarea">Hello</textarea>
我如何可能使用 trigger() 和键码在该文本区域上触发退格键。退格的代码是 8。我不是在寻找这个:
$('#myarea').val( $("myarea").val().slice(0,-1) );
我需要模拟某人实际按下键盘上的“退格”键。谢谢
您可以创建一个 keydown 事件:
var e = jQuery.Event("keydown", { keyCode: 20 });
然后在您的文本区域中触发它:
$("#myarea").trigger( e );
更新:
在做了更多的研究和测试之后,我意识到这个解决方案不会模拟HTML元素上的自然按键事件。此方法仅触发 keydown 事件,它不会复制用户进入元素并按下该键。
要模拟用户进入该文本框并按下该键,您必须创建一个调度事件
调度事件也不受全球支持。您最好的选择是触发 keydown 事件,然后按预期更新文本区域。
我找到了这个:
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/
您不应该在 js 中强制执行关键事件。尝试模拟字符删除。
const start = textarea.selectionStart - 1;
const value = textarea.value;
const newValue = value.substr(0, start) + a.substr(start);
textarea.value = newValue;
或者,如果您只想要事件,请直接调用处理程序,而不是强制事件。这太hacky了。