对象在panel.port.on上返回两次

时间:2014-07-07 18:51:33

标签: javascript firefox firefox-addon-sdk

我遇到过这样的问题,即来自contentScriptFile的数据会在渐进式中的每个调用函数上返回,例如:对于第一次调用,它只返回1个实例,对于第二次调用,它返回2个实例,对于第三次调用,它返回3个实例。

main.js:

var panel = panels.Panel({
    width: 270,
    height: 255,
    contentURL: self.data.url("panel.html"),
    contentScriptFile: self.data.url("panelScript.js"),
});

function handleClick(state) {
    panel.show({
        position: button
    });
}

panel.on("show", function() {
    panel.port.emit("pane");
});

panel.port.on("check", function(options) {
    panel.hide();
    console.log(options);
});

panelScript.js:

self.port.on("pane", function onShow() {
    selectChoosen.addEventListener("click", function onClick(event) {
        self.port.emit("check", options());
    }, false);

});

function options() {
    return selectedOptions;
};

你能帮我弄清楚如何修复它吗?

1 个答案:

答案 0 :(得分:2)

这是因为每次调用onShow处理程序时都要添加click处理程序。我想你想要做的是:

selectChoosen.addEventListener("click", onClick, false);

function onClick(event) {
  self.port.emit("check", options());
}

function options() {
    return selectedOptions;
};

...这样你只需添加一次click事件监听器。