我想創建一個簡單的擴展,每次點擊一個按鈕時提醒鼠標點擊(mouseup)座標。 (學習嘗試)爲什麼每次我點擊我的toolbarbutton時,我的javascript變得不確定?
擴展工作正常,設置正確,除了一個小故障。
我的XUL文件:
<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="chrome://global/skin/" ?>
<?xml-stylesheet type="text/css"
href="chrome://mouseclick/skin/mouseclick.css" ?>
<!DOCTYPE overlay SYSTEM
"chrome://mouseclick/locale/mouseclick.dtd">
<overlay id = "overlay-id" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/x-javascript"
src="chrome://mouseclick/content/mouseclick.js" />
<toolbarpalette id="BrowserToolbarPalette">
<toolbarbutton id="mouseclick-button" class="mouseclick-class"
label="&button.label;" tooltiptext="&tooltip.text;"
oncommand = "mouseClick.display();"/>
</toolbarpalette>
<toolbar id="nav-bar">
<toolbarbutton id="mouseclick-button" class="mouseclick-class"
label="&button.label;" tooltiptext="&tooltip.text;"
oncommand = "mouseClick.display();"/>
</toolbar>
</overlay>
我的JS文件:
if(mouseClick === undefined) {
var mouseClick = {
_x : "not yet clicked" ,
_y : "not yet clicked"
};
}
mouseClick.handler = function(e) {
var x = e.pageX !== undefined ? e.pageX : e.clientX;
var y = e.pageY !== undefined ? e.pageY : e.clientY;
/*A TEST ALERT
alert("(" + x + ", " + y + ")"); // a dummy command for testing
*/
this._x = x;
this._y = y;
};
mouseClick.display = function() {
alert("(" + this._x + ", " + this._y + ")");
};
window.addEventListener("mouseup", mouseClick.handler, false);
問題,當我在文檔中的任意位置單擊,或任何地方的窗口,除了我的擴展按鈕,測試警報命令提醒正確的座標。
然而,當我點擊我的按鈕,(這是再次觸發警報命令), 第一測試警報返回正確的座標。
,但在主要警報,提醒(not yet clicked, not yet clicked)
。
爲什麼我的mouseClick
對象每次點擊我的分機按鈕時都會重置?
不能你傳遞函數調用mouseClick.handler的事件?當你綁定函數時(因爲事件監聽器可以應用參數),這不是問題,但是如果你手動處理了這個調用,你必須自己做。 – Bubbles
@泡泡:謝謝,忘了。 –