close

大爺最近遇到了一個問題

就是如何停止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)

而要使用這些「內建函式」有很多「逃脫的方式

像大爺上面用的偷吃步數也算是其中的一種逃脫方式啦^^"

arrow
arrow
    全站熱搜

    大爺 發表在 痞客邦 留言(0) 人氣()