pyjd/hulahop/pyxpcom:如何从Python/C++触发onchange事件
我正在使用pyjd/hulahop/pyxpcom来加载一个包含输入框的HTML文档,这个输入框绑定了一个“onchange=....”的事件,事件会调用某个JS函数来进行AJAX请求。
这个HTML大概长这样:
...
<input name="inp" type="text" onchange="checkInput()"></input>
...
我可以很容易地找到并修改这个输入框,代码如下:
import pyjd
pyjd.setup(URL)
bw = pyjd.hula.wv
doc = bw.getDomDocument()
inp = doc.getElementsByName("inp").item(0)
inp.value = "somestring"
不过,这样做并不会触发“onchange”事件,似乎我必须手动切换到输入框再切换出去才能触发这个事件。我发现pyxpcom的接口和C++的接口很相似,所以我查阅了一些C++的代码片段。我尝试了几种方法,使用FocusManager接口,对“inp”元素发出.focus()和.blur()事件,但到目前为止都没有成功。
有没有人知道这应该怎么做?这真的可能吗?有没有办法直接调用这个绑定的onchange事件处理函数?
附注:抱歉使用了pyjamas标签,我不能创建'pyjd'标签 :-)
1 个回答
1
通常,当输入框失去焦点或者按下回车键时,会发送变更事件。一般来说,程序自动修改的内容不会触发这些事件,所以如果你想要这个事件被触发,最好自己手动触发一个变更事件。有一些示例代码可以用来触发点击事件;变更事件的处理方式类似,不过在这种情况下,事件类型是Events,而不是MouseEvents,因此你需要调用InitEvent来进行设置。