我有一个带有自动完成扩展程序的输入框。我想用jquery或javascript模拟按键。按下键应该会打开自动补全弹出窗口。
我搜索模拟使用jquery按键,并提出了这些答案:1)用jQuery模拟按键2)从Javascript控制台模拟按键事件3) JQuery模拟输入字段
上的按键事件所有这些都允许我一次只模拟一个键。但如果我想允许批处理键事件呢?例如,我想在一行代码中直接键入"abcde"文本,而不必键入每个字符的键代码。
编辑:
我正在尝试使用谷歌chrome控制台模拟按键。没有一个答案对我有用:(
是否可以通过jquery/javascript或其他库?
这段代码模拟在输入框中输入:
var txt = "Lorem ipsum dolor";
var timeOut;
var txtLen = txt.length;
var char = 0;
var tb = $("#tb").attr("value", "|");
(function typeIt() {
var humanize = Math.round(Math.random() * (200 - 30)) + 30;
timeOut = setTimeout(function () {
char++;
var type = txt.substring(0, char);
tb.attr("value", type + '|');
typeIt();
if (char == txtLen) {
tb.attr("value", tb.attr("value").slice(0, -1))
clearTimeout(timeOut);
}
}, humanize);
}());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="text" id="tb">
根据我的理解,您正在寻找一种不处理每次按键自动完成的方法,并希望允许用户添加适当的单词然后处理它。
解决方案- 在textbook上添加一个keydown事件。
- 创建一个SetInterval,一旦达到阈值时间将触发事件。
- 重置每次按键的时间间隔,以确保阈值时间保持不变,无论查询时间有多长。
- 清除一次自动完成处理的间隔,这样你就不会每秒钟都击中功能。
下面是描述相同内容的JSFiddle
代码var interval = 0;
var callInterval = null;
function registerEvents(){
$("#txtField").on("keydown", function(e){
var keyCode = e.keyCode ? e.keyCode : e.which;
console.log(keyCode);
if(!callInterval){
intervalInit();
}
else{
resetInterval();
}
});
}
function intervalInit(){
interval = 0;
callInterval = setInterval(function(){
interval++;
if(interval >=1){
fetchAutoCompleteData($("#txtField").val());
window.clearInterval(callInterval);
callInterval = null;
}
},1000);
}
function resetInterval(){
window.clearInterval(callInterval);
intervalInit()
}
function fetchAutoCompleteData(data){
console.log("Data: ", data)
}
(function(){
registerEvents();
})()
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<input type="text" id="txtField"/>