0

我正在使用一个 JQuery 插件做一些工作,该插件在用户输入时对文本区域框中的文本进行倒计时。由于某种原因,该插件无法按我的预期工作。

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

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

我已经能够使用alert()'s 追踪到插件的这一部分——我可以看到处理到了一个特定的点,但似乎没有继续进行。或者我可能误读了它,因为我还在学习如何调试 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 有什么改变使这项工作有所不同吗?

编辑:这是原始 NobleCount jquery 插件页面的链接

编辑:我这样调用插件:

(function() {

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

}).call(this);
4

1 回答 1

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”。因此,您需要查看选择器而不是插件。

于 2012-05-03T20:06:12.310 回答