Javascript,原型对象,jQuery和计时器

我以为我已经通过类型更正在星期五解决了这个问题,但是我没有:(

我一直在努力寻找解决这个问题的方法(如果有的话).也许我不是在寻找正确的东西,但是我只是找不到解决方案…

设置:

$.myPlugin = function(element, options){
    this.myElement = $(element);
    this.myElement.data('rotator', '');
    this.myElement.data('settings', $.extend({}, $.myPlugin.defaultOptions, options));
    this.mainFunction(this.myElement);
};

$.myPlugin.defaultOptions = { // yadda yadda };


$.myPlugin.prototype = {
    mainFunction : function(myself){
        // establish initial parameters
        var TEST = Math.rand();

        // do a bunch of stuff
        $(myButton).live('click', function(){               
            alert(TEST) //<---FOR TESTING PURPOSES

            // do other things
            myself.data('rotator', setTimeout(function(){               
                // click button after x period
                myButton.click();   
            }, x ));    
        });
    },

    destroy : function(){
        myself = $(this);
        myself.myElement.removeData('settings');
        clearTimeout(myself.data('rotator'));
    }
};

$.fn.myPlugin = function(options) { 
    // parse options
    this.each(function(){
        var instance = $(this).data('myPlugin');

        // blah blah blah ... on create
        $(this).data('myPlugin', new $.myPlugin(this, args));

        // blah blah blah ... on destroy
        instance['destroy'].apply(this);
        $(this).data('ddGallery', null);
    };
    return this;
};

所需功能:

按照我的逻辑,我想在元素上创建一个对象.然后,插件将元素的内容存储在变量中,并将新内容放入其中.点击时会调用一个自动定时事件,并带有.live()点击监听器. click事件会重置计时器,从而导致循环(与使用setInterval相反).销毁时,我替换了存储的原始html内容,并想杀死该对象.到目前为止,这一切正常.然后,我希望能够在元素上重新创建对象(也许传递不同的设置).

这是所有错误的地方:

销毁后在同一元素上重新创建对象时,原始计时器继续运行.我无法摆脱臭豆腐的计时器,而我正要扯掉我的头发!

为了进行测试,我在初始化时设置了一个随机数,并在单击时提醒该数字.最初,我可能会收到例如“ 0.1234”的警报.然后,我可以销毁对象(我只是在窗体按钮上使用侦听器来创建和销毁).元素将返回其初始状态,并快乐地无限期地坐着.但是,一旦我再次在元素上运行插件,原始的“ 0.12345”警报就会立即弹出,而不会延迟(并且所有动画都会触发).随后是另一个新的弹出窗口,例如“ 0.5678”.现在,两个计时器都继续向该元素触发,造成了严重破坏.

我想念什么?

解决方法:

您不会在您的destroy方法中取消绑定按钮上的原始click事件.您需要添加一个呼叫,例如:

   myself.die('click');

在你的破坏方法.您看到将来的点击提示原始随机数的原因是因为您是第一次将封闭事件绑定到click事件.您可以杀死计时器,但不要取消绑定点击处理程序.

下次单击该按钮时,将绑定一个新的单击处理程序.现在您有两个单击处理程序,每个单击处理程序都是一个闭包,用于记住创建时生成的随机数.现在,单个计时器会重复触发该元素,每次单击都会触发两个单击处理程序.

上一篇:九度OJ 1084 整数拆分


下一篇:Qt之高仿QQ通信软件(四)