2015-08-28 93 views
0

我在哪裏犯了一個錯誤?這是一些語法錯誤?如何編寫自己的自定義jQuery插件(Uncaught TypeError:...不是函數)

custom.js:

(function($){ 
    $.fn.marquee = function(options, callback){ 

     // check callback 
     if(typeof callback == 'function'){ 
      callback.call(this); 
     } else{ 
      console.log("secound argumnt (callback) is not a function"); 
      throw "callback must be a function"; 
      return; 
     } 

     //set and overwrite default options 
     var defOptions = $.extend({ 
      option1: 10, 
      option2: 'something' 
     }, options); 
    }; 

    //plugin logic here 
    // ... 

    return this; 

}(jQuery)); 
//END PLUGIN 

在同一文件現在我嘗試通過調用運行插件:

// RUN PLUGIN with options or leave empty for defeaults 
$.marquee({ 
    option1: 9, 
    option2: 'something else' 
}, function(){ 
    alert('some callback'); 
}); 

然後我得到這個錯誤(在Chrome瀏覽控制檯)...有誰知道什麼這裏的問題?:

Uncaught TypeError: $.marquee is not a function 

更多從Chrome的控制檯錯誤信息:

(anonymous function) @ custom.js:25m. 
Callbacks.j @ jquery-1.11.2.min.js:2m. 
Callbacks.k.fireWith @ jquery-1.11.2.min.js:2m. 
extend.ready @ jquery-1.11.2.min.js:2J @ jquery-1.11.2.min.js:2 
+1

您創建了對*元素*,因此你必須先選擇一些元素的作品插件:'$(「格」)選框( )'。我建議閱讀jQuery教程:http://learn.jquery.com/plugins/basic-plugin-creation/ –

+0

'$(window).marquee();' – RRK

回答

1

這是因爲您已將它附加到jQuery的原型$.fn。你的插件將正確的工作有你的代碼中

$('some element').marquee({ 
    option1: 9, 
    option2: 'something else' 
}, function(){ 
    alert('some callback'); 
}); 

$.fn聲明是在元素工作插件,插件並具有自己的插件裏面的this參考。

解決辦法是宣佈它$jQuery

$.marquee = function { 
    // (...) Code here 
} 
相關問題