MozTW 討論區
https://forum.moztw.org/

this跟create event的兩個問題 煩請幫忙
https://forum.moztw.org/viewtopic.php?f=11&t=28145
1 頁 (共 1 頁)

發表人:  stellvia7 [ 2009-09-30, 09:42 ]
文章主題 :  this跟create event的兩個問題 煩請幫忙

(一)
當我alert(this)

會出現
object XULElement

告訴我這是一個xul的object.

但是要怎麼知道這是xul element中的那一種物件

像是event我可以 alert(event.type) 來得知這是那一種event

相對的應該有方法知道這是那一種物件吧 this.name?? 但是是undefined

(二)
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("mousedown", true, true, window,
0, 0, 0, 0, 0, false, false, false, false, 1, null);

var cb = document.getElementById("content");

//cb.dispatchEvent(evt);
//cb.contentWindow.dispatchEvent(evt);
//window.content.document.defaultView.dispatchEvent(evt);


上面的code是我想要在視窗中送出模擬中鍵的event但是總是失敗 應該是我dispatchEvent的地方有錯

可是也找不到解答


以上兩個問題 感恩~~~

發表人:  stellvia7 [ 2009-09-30, 11:06 ]
文章主題 :  Re: this跟create event的兩個問題 煩請幫忙

var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("mousedown", true, true, window,
0, 0, 0, 0, 0, false, false, false, false, 1, null);

var cb = document.getElementById("content");

cb.dispatchEvent(evt);

說錯關於 dispatchEvent 的地方似乎沒有錯 因為我開啟autoscrolling mode
再來在視窗上面按中鍵會出現 autoscrolling 的icon 然後就可以移動網頁的位置

之後我將 dispatchEvent 每隔2秒自動dispatch一次 , 再開啟autoscrolling mode出現icon後 
過兩秒後會因為收到中鍵的event 那個icon就位自動消失 autonscrolling mode也會取消

問題是為啥可以取消mode 卻不能以送event的方式開啟autoscrolling mode??

發表人:  stellvia7 [ 2009-09-30, 11:08 ]
文章主題 :  Re: this跟create event的兩個問題 煩請幫忙

...還是dispatch的地方有問題??

因為我在錯誤的地方dispatch event??

然後之所以會取消autoscrolling mode 是因為不論在哪裡按中鍵都都會取消 mode

而要開啟autoscrolling mode是要再正確的地方dispatch...??

發表人:  cwchien [ 2009-09-30, 22:50 ]
文章主題 :  Re: this跟create event的兩個問題 煩請幫忙

A1. 以下是 XUL element 通用的屬性 (attribute) 列表
https://developer.mozilla.org/en/XUL_element_attributes
我想 class 這個屬性應該是您要的。

A2.
1. 這是 contentWindow 這個性質 (property) 的說明
https://developer.mozilla.org/en/XUL/Property/contentWindow
請注意 window object in the element 這句
如果寫 cb.contentWindow,取得是 cb 「裡」的視窗物件,cb 是父,視窗是子
若 cb 本身是個 Frame 或 iFrame,這是 OK 的,
但如果要的是包含 cb 的那個視窗,並不能這樣寫

2. 這是 MDC 針對 dispatchEvent 的說明
https://developer.mozilla.org/En/DOM/Element.dispatchEvent
其實百分之八九十大同小異,但請注意:
initMouseEvent 的 type 建議改為 click (點擊一次),mousedown是指滑鼠按下後都沒放開
我不知道這會不會是問題的關鍵所在

3. 單就您的程式來說,只是送出中鍵事件,
一旦使用者本身沒將 FX 進階選項的 auto scroll mode 打勾,就算中鍵事件有送出也不會出現 icon
若要用程式開啟 auto scroll mode,得先取得 browser 物件或 tabbrowser 物件
這可利用 getBrowserForDocumentgetBrowserAtIndexgetBrowserForTab 的 method 來達成
然後將其 autoscroll 屬性設為 true,之後再送出中鍵事件即可出現 icon

4. 這是 XUL 說明總表,有物件、屬性、性質、方法等,值得參考
https://developer.mozilla.org/en/XUL_Reference

5. 此外,這種跟程式開發有關的應該到特別議題 -> 程式開發討論區去發問,會比較容易得到回應
擴充套件討論區比較偏向於聊使用面而非開發面 ^ ^"

發表人:  rz600000 [ 2009-10-01, 10:11 ]
文章主題 :  Re: this跟create event的兩個問題 煩請幫忙

首先 : 感恩樓上 學到很多


但是我現在想要做的是 當user mousedown 超過1秒則自動進入autoscrolling mode

所以我要送一個mouseup 將之前的 mousedown up起來

此時再送一個中鍵mousedown 才會進入autoscrolling mode 但是 ..就是一直辦不到..

我有去trace browser.xml 裏面有開啟 scrolling mode 的 function startScroll(event);

此function 中有一行
this._scrollingView = event.originalTarget.ownerDocument.defaultView;
我使用 alert(event.originalTaget.nodeName); 會出現html 的標籤如 DIV 之類的

但是假若我自己送中鍵event alert(event.originalTaget.nodeName); 會變成 xul element

所以我覺得我dispatch的地方錯誤了,

再來我想將之前的mousedown 送一個mouseup 這點也一直稿不出來=.=

謝謝~~

還有可以幫我把文章轉過去嘛...感恩謝謝您

1 頁 (共 1 頁) 所有顯示的時間為 UTC + 8 小時
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/