2012-05-03 57 views
0

我正在做一些工作,用一個JQuery插件,在用戶輸入textarea框中記下文本。出於某種原因,該插件沒有按照我的預期工作。調試jQuery插件 - 在1.4中工作,似乎不工作在1.7

我是一個合理的JavaScript開發人員,但以前沒有構建過插件。我試圖調試這一個,並找出爲什麼它不工作。

插件將自己描述爲使用jQuery 1.3.x和1.4.x進行測試。我必須使用1.7.1。

我已經能夠使用alert()的追蹤到這部分的插件 - 我可以看到處理進入了一個尖端點,但似乎沒有進行。或者我可能會誤讀它,因爲我仍在學習如何調試jQuery插件。

在代碼片段中,我添加了註釋,以便我可以從alert s開始工作,並且我無法在其中工作。

$.fn.NobleCount = function(c_obj, options) { 
    var c_settings; 
    var mc_passed = false; 

    // if c_obj is not specified, then nothing to do here 
    if (typeof c_obj == 'string') { 

     // check for new & valid options 
     c_settings = $.extend({}, $.fn.NobleCount.settings, options); 

     // was max_chars passed via options parameter? 
     if (typeof options != 'undefined') { 
      mc_passed = ((typeof options.max_chars == 'number') ? true : false); 
     } 


        // THIS ALWAYS FIRES 
        console.log("I am here"); 

     // process all provided objects 
     this.each(function(){ 

          // THIS NEVER FIRES 
          console.log("I DON'T SEEM TO EVER EXECUTE"); 

      var $this = $(this); 

      // attach events to c_obj 
      attach_nobility($this, c_obj, c_settings, mc_passed); 
     }); 
    } 

    return this; 
}; 

attach_nobility函數中的代碼似乎永遠不會運行。

有什麼改變從jQuery 1.4到jQuery 1.7,使這項工作不同?

編輯:這裏的鏈接到original NobleCount jquery plugin頁面

編輯:我打電話這樣的插件:

(function() { 

    $('#how_to_improve_input').NobleCount('#how_to_improve_count'); 

}).call(this); 
+0

注意:我已經確認了我附加的這個jquery選擇器是一個有效的選擇器。 –

+0

這是什麼,當你console.log/dir它? – epascarello

+0

console.log(this);給出'[]'。我猜想我解釋了很多。從1.4開始,這個''是否已經通過插件更改? –

回答

1

我不認爲這個問題是與插件。我做了一個與你提供的代碼具有相同模式的基本代碼。

(function($){ 
    $.fn.foo = function (c_obj, options) { 
     var c_settings; 
     var mc_passed = false; 
     if (typeof c_obj == 'string') { 
      c_settings = $.extend({}, {a:"xxxx"}, options); 
      console.log("aaaa"); 
      this.each(
       function(){ 
        console.log("I DON'T SEEM TO EVER EXECUTE"); 
        var $this = $(this); 
       } 
      ); 
     } 
     return this; 
    }; 
})(jQuery); 

如果我用一個簡單的選擇

jQuery("div").foo("asdf"); 

運行它,我得到噸的日誌消息,因爲它進入的每一個循環。

如果我

jQuery("sfsdfdiv").foo("asdf"); 

做它仍然進入功能,即使沒有任何元素。我在控制檯中看到「aaaa」。所以你需要看看選擇器而不是插件。