Сегодня я впервые столкнулся с проблемой, когда переменные смешивались с несколькими экземплярами плагинов jQuery.
Простую версию моего плагина можно посмотреть здесь: http://jsfiddle.net/jydzB/2/
Я хочу иметь возможность просто создать таймер в плагине и получить доступ к переменной «myTimer» в другом методе в плагине.В этом случае уничтожить его.Тем не менее, я подумал наверняка, что создание переменных, как я сделал ниже с "myTimer", сделал эту переменную доступной только в этом классе / плагине?Я ошибся?Как использовать переменные в плагине?Я знаю, что могу хранить их в $ obj.data ('', ''), но это не имеет смысла делать, когда вы можете просто сохранить его в переменной.
Вы увидите это, когдаВы запускаете скрипт jsFiddle, он не разрушает таймер.
Простой HTML
Write a line every five seconds... destroy it after 10:<br />
<hr />
<div id='myDiv' style='border: solid 1px #000;float:left;'></div>
<div id='myDiv2' style='border: solid 1px #f00;float:right;'></div>
Плагин jQuery
if (jQuery) (
function (jQuery) {
var myTimer;
var methods = {
init: function () {
return this.each(function () {
var $obj = $(this);
var data = $obj.data('init');
if (!data) {
myTimer = setInterval(function(){
writeLine($obj)
}, 1000);
$obj.data('init', true);
$obj.data('cnt',0);
}
});
},
destroy: function () {
var $obj = $(this);
$obj.data('init', false);
clearInterval(myTimer);
$obj.append("Destroyed!");
}
};
$.fn.timeIt = function (method) {
if (methods[method]) {
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method === 'object' || !method) {
return methods.init.apply(this, arguments);
} else {
$.error('Method ' + method + ' does not exist on jQuery.timeIt');
}
};
}
)(jQuery);
$('#myDiv').timeIt();
$('#myDiv2').timeIt();
function writeLine(cObj) {
cObj.data('cnt',cObj.data('cnt')+1);
cObj.append("Another line written...(" + cObj.data('cnt') + ")<Br />");
if(cObj.data('cnt')>=10){
cObj.timeIt('destroy');
}
}