Javascript 如何在内联选项的输入上使用addEventListener
因此,内联选项有一个名为Javascript 如何在内联选项的输入上使用addEventListener,javascript,firefox-addon,inline,options,Javascript,Firefox Addon,Inline,Options,因此,内联选项有一个名为inputChanged的函数,当您执行某项操作时会触发该函数 例如,与文件选择器内联选项类似:如果单击“浏览”,它将执行以下命令: function showPicker() { var filePicker = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker); filePicker.init(window, this.getAttribute(
inputChanged
的函数,当您执行某项操作时会触发该函数
例如,与文件选择器内联选项类似:如果单击“浏览”,它将执行以下命令:
function showPicker() {
var filePicker = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
filePicker.init(window, this.getAttribute("title"),
this.type == "file" ? Ci.nsIFilePicker.modeOpen : Ci.nsIFilePicker.modeGetFolder);
if (this.value) {
try {
let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
file.initWithPath(this.value);
filePicker.displayDirectory = this.type == "file" ? file.parent : file;
if (this.type == "file") {
filePicker.defaultString = file.leafName;
}
} catch (e) {}
}
if (filePicker.show() != Ci.nsIFilePicker.returnCancel) {
this.value = filePicker.file.path;
this.inputChanged();
}
}
注意这个.inputChanged
。
您可以通过获取设置xul属性并警告inputChanged
来查看此函数是什么
var setting=document.querySelector('setting[pref=“extensions.thropberrestored.customImgIdle”])代码>
现在我们看到inputChanged是:
function inputChanged() {
if (this.usePref && !this._updatingInput) {
this.valueToPreference();
this.fireEvent("oninputchanged");
}
}
我们看到mxr上的fireEvent
是:
59
60
61
62
63
78
79
因此,如果我们想触发oninputchanged
事件,我们必须在设置xul元素上设置setAttribute
。就像您设置了.setAttribute('oninputchanged','alert(“hi”)”
,在执行文件选择器后,它将显示此警报。但是我想在oninputchanged
的设置
元素上添加addEventListener
,这不可能吗
我的次要目标是观察设置.value
并在它发生变化时做些事情。例如,如果用户执行文件选择器并拾取相同的文件,那么setting.value
保持不变,实际上更改为相同的内容。这不是我在dom检查器中看到的属性,所以我没有测试变异观察者
但是我想为oninputchanged在这个设置元素上添加EventListener,这不可能吗
如果不修补绑定的fireEvent
(或者提交一个bug并将其修复),就不能这样做。此方法的名称具有误导性。它实际上并不触发事件,它只是创建一个事件,从oninputchanged
属性内容创建一个匿名函数并调用该函数。在其中的任何元素上都没有.dispatchEvent()
编辑当然,您可以从oninputchanged
代码中自行调度事件
this.dispatchEvent(event);
我的次要目标是观看setting.value
只有当pref值实际更改时,才会触发
在
元素的值
属性上可能会工作
变异观察者不起作用(或者至少不应该起作用),因为变异观察者不应该看到每个设计中匿名节点的变异,并且持有该值的
是匿名的
没有值
属性,顺便说一句,只有值
(JS)属性。啊,好的,酷男人,谢谢!我用这个oninputchanged
东西更新了MDN。这么多东西都没有记录,人们需要分享(我听说.watch
对性能不好,不是吗?我之所以不敢使用pref-watcher,是因为基于这一更改,我更新了一些xul元素。然后我必须创建另一个观察者,用xul文档通知它。这不是一个坏主意,我只是想利用他们设计的功能:(现在我做了内联废话:哦,我也不确定我是否可以内联服务。obs.notifyObserver
来自oninputchanged
。但是更多的想法是它是私有的,所以我确定它们有一些notifyObserver
功能。这样做的原因是,如果我只是pref-watcher,那么我必须1)测试addont manager tab open(可以打开多个选项卡,windows等)2)是否是我的加载项文档显示该死,我累了…请参见编辑(当然,您可以notifyObserver
,或者执行其他操作,如直接在相应窗口中调用函数)啊,发送事件!哦,我的天啊,我完全忘记了,谢谢你!你累了,你像我一样打字,“我累了。”哈哈,我不能编辑评论!
this.dispatchEvent(event);