大爺最近遇到了一個問題
就是如何停止jquery plugin內的timer變數
因為一般來說寫成外掛的方式
是載入「外部連結檔」
也就是說「要如何存取外部連結檔內的變數」
問了google大神也問不出所以然來
大爺是想在主程式做某一動作時
能夠重新載入外掛檔案
並改變外掛檔案傳入的參數
後來大爺想了一個很笨的方式
就是在「原程式的事件發生時」對「外掛程式也觸發一個事件」
像是這樣:
原程式:
jQuery('.marquee').trigger("click");
外掛內的程式:
getthis.bind("click",
//改變跑馬燈內容
function(){
clearTimeout(timer);//停止時間器
}
);
如此一來就能控制和停止外部程式內的變數啦…
能想出這種偷吃步的方式…大爺真是聰明啊…哈哈… ^^"
不過不知道這種方式有沒有什麼後遺症之類的…還要再想想…
補遺:
大爺後來真的想了一想…這樣真的有個後遺症…如果我在該元件上點一下…
那…就真的停止跑時間器了…這麼簡單的問題都沒發現…真的是傻傻的…@@
所以這個方法是失敗了…再換個方式吧…
那如果將原本是觸發「click」的事件改成「change」哩
這麼一來是不是就不會對使用者的動作有任何的影響
因為元件是div的關係
一般來說是沒有機會用到「change」這個滑鼠事件的
那我們來試試看吧…
原程式:
jQuery('.marquee').trigger("change");
外掛內的程式:
getthis.bind("change",
//改變跑馬燈內容
function(){
clearTimeout(timer);//停止時間器
}
);
執行的結果好像也沒什麼改變
而且也可以正常的運作
這真是個偷吃步的方式啊…哈 ^^"
後續…
後來大爺有在書上看到這方面的討論…
因為Javascript是屬於支援「內建函式宣告」
主要是為了避免對「命名空間的干擾」
這種函數的類型就稱作「閉鎖」(closure)
而要使用這些「內建函式」有很多「逃脫的方式」
像大爺上面用的偷吃步數也算是其中的一種逃脫方式啦^^"
留言列表