Han*_*k X 5 javascript jquery facebook javascript-events
就像在图像中一样,Facebook评论框没有提交按钮,当你写东西并按下Enter按钮时,评论发布.
我想通过在控制台中运行的JavaScript提交评论.但我试图触发Enter事件,提交DOM的事件.无法使它工作.

Ben*_*lum 16
当前注释框是不是一个传统<textarea>的内部<form>.他们在div上使用contenteditable属性.为了在这种情况下提交,你要听键盘事件之一(keydown,keypress,keyup)并寻找Enter这是键码13键.
看起来FB keydown在这种情况下正在听evt,所以当我运行这段代码时,我能够假装提交评论:
function fireEvent(type, element) {
var evt;
if(document.createEvent) {
evt = document.createEvent("HTMLEvents");
evt.initEvent(type, true, true);
} else {
evt = document.createEventObject();
evt.eventType = type;
}
evt.eventName = type;
evt.keyCode = 13;
evt.which = 13;
if(document.createEvent) {
element.dispatchEvent(evt);
} else {
element.fireEvent("on" + evt.eventType, evt);
}
}
fireEvent('keydown', document.querySelector('[role="combobox"]._54-z span span'));
Run Code Online (Sandbox Code Playgroud)
关于这一点需要注意几点.这堂课._54-z是他们碰巧在我的页面上使用的课程.你的旅费可能会改变.使用开发工具确保你抓住正确的元素(它应该具有咏叹调角色"combobox").此外,如果您希望支持旧浏览器,则必须调整fireEvent上面的功能代码.我只测试了最新Chrome中的上述示例.
最后,为了使问题复杂化,Facebook正在使用React,它创建当前页面的虚拟DOM表示.如果您手动将字符键入组合框然后运行上面的代码,它将按预期工作.但是你将无法将组合框的最内层的内部<span>HTML设置为你想要做的事情然后触发keydown.您可能需要change在组合框上触发事件,以确保您的消息持续存在于Virtual DOM中.
这应该让你开始!希望有所帮助!