'onkeydown'属性可见但是null?

时间:2015-02-16 04:30:26

标签: javascript html facebook event-handling reactjs

我正在撰写Chrome扩展程序,我正在尝试以编程方式触发您在Facebook聊天中输入的textarea元素上的按键事件。

如果我查看检查器中的元素,我可以看到它设置了onkeydown处理程序:

onkeydown="run_with(this, ["legacy:control-textarea"], function() {TextAreaControl.getInstance(this)});"

- 但我无法触发它。在试图弄清楚为什么我无法触发它时,我发现当我使用其中一个类选择元素并在控制台中键入document.querySelector('._552m').onkeydown时,它会出现null。同样,在getAttribute上使用onkeydown会出现null

我在这里缺少什么?我怎样才能得到这个事件处理程序?为什么我可以在检查器中的元素上看到它设置但是不能以通常的方式以编程方式访问它? React在这里拉出了一些奇怪的魔法吗?

修改:document.querySelector('._552m').attributes显示列出的onkeydown属性.... wtf ...

1 个答案:

答案 0 :(得分:0)

如果document.querySelector('._552m').attributes显示onkeydown属性,您应该能够使用document.querySelector('._552m').getAttribute('onkeydown')访问事件处理程序(它适用于我,在我的脸书页面上返回):

"run_with(this, ["legacy:control-textarea"], function() {TextAreaControl.getInstance(this)});"

否则,由于属性对象只是NamedNodeMap,您可以使用getNamedItem('onkeydown')上的document.querySelector('._552m').attributes来访问它,如下所示:

var elm = document.querySelector('._552m')
elm.attributes.getNamedItem('onkeydown')    //returns the attr itself
elm.attributes.getNamedItem('onkeydown').value   //returns the string value