调试jQuery插件 - 在1.4中工作,似乎在1.7中不起作用

时间:2012-05-03 18:55:48

标签: javascript jquery jquery-plugins

我正在使用JQuery插件进行一些工作,当用户输入时,它会在textarea框中对文本进行倒计时。由于某种原因,该插件无法正常工作。

我是一个合理的JavaScript开发人员,但之前没有构建过插件。我正在尝试调试这个,并弄清楚它为什么不起作用。

该插件将自身描述为使用jQuery 1.3.x和1.4.x进行测试。我必须使用1.7.1。

我已经能够使用alert()来追踪插件的这一部分 - 我可以看到处理进入了一个证据点,但似乎没有继续进行。或者我可能会误读它,因为我还在学习如何调试jQuery插件。

在代码片段中,我添加了评论,以便我可以alert从哪里工作,哪些我无法工作。

$.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);

1 个答案:

答案 0 :(得分: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”。所以你需要看看选择器而不是插件。