2013-12-07 3 views
0

Я объявившие переменные вне плагин, так что я могу изменить их позже, как так:Как изменить переменные внутри плагина jquery?

$node.ondrag({start:function(){ console.log(this,"start drag"); }}); 
$node.change({start:function(){ console.log(this,"other function"); }}); 

Но, по-видимому, если я придаю плагин к другому элементу, то функция будет перезаписана для обоих.

(function($) { 
    var startfn, dragfn, endfn; 
    $.fn.ondrag = function(opt){ 
     var obj = this; 
     startfn = opt['start']||null; 
     this.on("mousedown",function(){ if (startfn) obj.startfn(); }); 
     return this; 
    }; 
    $.fn.change = function(opt){ 
     startfn = opt['start']; 
     return this; 
    }; 
})(jQuery); 

Как я могу установить разные переменные для каждого элемента, который использует плагин?

+0

необходимость определения переменных внутри плагина .... также не рекомендуется использовать 'change' и overrirding же метод JQuery – charlietfl

ответ

2

Вместо того, чтобы хранить информацию в переменных, вы можете использовать jQuery's .data API, чтобы сохранить ее на каждом элементе.

E.g.

var startfn = opt['start'] || null; 
this.data('myplugin.startfn', startfn); 

Если вы делаете более авансовый материал, я предлагаю, чтобы иметь look at jQuery UI's $.widget factory method. Предполагается, что упростить создание плагинов с поддержкой состояния. Он также использует $.data под капотом.

Также, как указано в комментарии, вы не должны перезаписывать существующий метод jQuery. Похоже, ваша функция .change является своего рода вспомогательной функцией в вашем плагине. Ознакомьтесь с jQuery documentation about plugins, под номером «Обеспечить публичный доступ к дополнительным функциям как применимым». В принципе, вы бы .change свойство функции плагина:

$.fn.ondrag.change = function(opt){ 
    // ... 
}; 
+0

Последнее решение является большим , поэтому мой объект dom не заполнен атрибутами данных. – shuji

+0

Вам все равно придется использовать '.data' для хранения фактических данных. Примером является только структурирование ваших методов плагина. Я забыл удалить код из тела. –

+0

Я как бы ожидал этого, я просто подумал, что есть встроенное решение с локальными переменными в плагинах. – shuji

Смежные вопросы