Javascript 向输入添加文本并触发ajax搜索

Javascript 向输入添加文本并触发ajax搜索,javascript,ajax,forms,input,google-chrome-extension,Javascript,Ajax,Forms,Input,Google Chrome Extension,一个网站正在表格中显示许多项目。当我在顶部的搜索栏中键入内容时,表格会发生变化,该搜索栏充当过滤器。这应该是自动化的(客户端) 我创建了一个Chrome扩展来运行脚本 问题: 我的脚本能够将搜索栏的值设置为我希望它使用的字符串: document.getElementById('filter').value = "Apple"; 问题是,即使搜索栏中的文本显示“apples”,下表也没有更新。如果我手动删除一封信,它会立即更新并过滤结果 有没有办法“模拟”实际的按键操作,以

一个网站正在表格中显示许多项目。当我在顶部的搜索栏中键入内容时,表格会发生变化,该搜索栏充当过滤器。这应该是自动化的(客户端)

我创建了一个Chrome扩展来运行脚本

问题:
我的脚本能够将搜索栏的值设置为我希望它使用的字符串:

document.getElementById('filter').value = "Apple";
问题是,即使搜索栏中的文本显示“apples”,下表也没有更新。如果我手动删除一封信,它会立即更新并过滤结果

有没有办法“模拟”实际的按键操作,以便更新表格


编辑和编辑解决方案: 我一直在努力使这项工作,但每次都失败了。然后我开始学习一点jquery,并学习了这个。一行代码

$("#filter").val("apple").trigger('keyup');
很好用

我还是非常感谢你,马塞利诺!你帮了我很大的忙,你努力想和我一起解决我的问题!谢谢大家!

编辑_2和最终解决方案: 第一个“解决方案”在chrome扩展中使用时不起作用。这个解决方案非常有效。它更改该值,然后触发ArrowUp事件以触发筛选器

var filter = document.getElementById("filter");
filter.value = "apple";
filter.dispatchEvent(new KeyboardEvent("keyup", {
    bubbles: true,
    cancelable: true,
    key: "ArrowUp"
  }));
解决方法如下:

您可以通过执行以下操作来模拟按键操作:

//有关按键模拟的更多信息,请访问:
// http://stackoverflow.com/a/5920206/1666547
//您不必了解这部分是如何工作的
//只需知道它使方法“document.triggerKeyPress”
//可供我们用于模拟按键
//把这个放在脚本开头的某个地方
//Node.prototype.triggerKeyPress=函数(字符){
//var event=document.createEvent('event');
//initEvent('keyup',true,true);
//event.keyCode=char.charCodeAt(0);
//文件、调度事件(事件);
//}
//这第二部分你应该尽力去理解
//从D.O.M.上抓取滤芯。
var$filterElement=$('#filter')//document.getElementById('filter'))
//如果需要,请为过滤器元件设置一个值
$filterElement.val('Apple'))
//将光标聚焦在其上进行键入
$filterElement.focus()
//从过滤器输入中获取值
//假设“查询输入”是“苹果”
var queryInput=$filterElement.val()
//倾听事件
//window.addEventListener('keyup',函数(事件){
//var actualCharacter=String.fromCharCode(event.keyCode)
//console.log('Typed:',actualCharacter)
//})
$filterElement.keyup(函数(事件){
var actualCharacter=String.fromCharCode(event.which)
console.log('Typed:',actualCharacter)
})
//现在我们将遍历“queryInput”的每个字符
//并为每个字符触发一个“keyup”事件,以便表过滤器
//认为有人真的输入了“苹果”这个词并进行了过滤
//因此。
查询输入
.split(“”)//通过在空白处拆分字符串将其生成数组
.forEach(函数(字母){//迭代字符“A-p-p-l-e”
//使用上面创建的“document.fire”方法
var e=jQuery.Event('keyup');
e、 keyCode=字母.charCodeAt(0);
e、 which=letter.charCodeAt(0);//#一些关键代码值
$filterElement.trigger(e);
//document.triggerKeyPress(letter)//触发“keypress”事件
})


据我所知,情况并不相同。我还需要以某种方式“激活”文本字段,以模拟其中的keypres。我是javascript新手,所以这里需要一些帮助!即使我已经访问了这个链接,谢谢!没问题,托马斯。检查我下面的答案,如果它不能满足你的需求,请在那里发表评论。嘿,它可能最终满足我的需求,但我觉得这对我的JS知识来说太高级了,我不知道如何正确使用它。我还检查了顶部的链接。我的脚本应该是自己运行的,所以打开网站后,id为“filter”的输入必须自动激活,并以某种方式填充“apple”,以便网站重新编码并更新下表。之后,我的脚本需要抓取一些只在页面被过滤时出现的元素。你能告诉我如何使用这段代码吗?我如何将其用于我的案例?我刚刚编辑了我的答案,并对代码进行了一步一步的解释。如果不看你写的所有代码,很难说得更多,但是看一看注释,理解它,并尝试使它适应你的需要。根据你的帖子,所有你需要的东西都应该在那里。嘿,非常感谢你在这里所做的工作!遗憾的是,运行该脚本时发生的唯一事情是“VM470:25未捕获引用错误:未定义字母(…)”。如果我尝试像“document.getElementById('filter').focus();”这样的操作,什么都不会发生。尽管我认为我理解了整个过程,但它似乎无法聚焦输入字段。对此表示抱歉,“ReferenceError:letter is not defined”(参考错误:字母未定义)上的诚实错误已修复,并且还必须替换按键模拟。我将工作代码制作成一个片段,以便您可以看到它的实际操作。当你按下“RunCodeSnippet”时,请注意在输入字段上有一个闪烁的光标。没有…同样的结果。非常感谢你的帮助!如果我能找到任何进一步的信息,我可以在这里复活这一个如果你想!