2013-12-23 2 views
0

Скажем, у меня есть это очень простой плагин:Плагин jQuery: как получить доступ к событию?

(function ($) { 

"use strict"; 

// Namespaced methods. 
var methods = { 
    init: function (options) { 

     return this.each(function() { 

      // Default settings. 
      var defaults = { 
       'sampleText': 'hello' 
      }; 

      var $this = $(this); 
      var data = $this.data('me'); 

      // Continue if the plugin hasn't been initialized yet. 
      if (!data) { 

       $this.mouseup(function() { 
        $this.trigger('onClick'); // events. 
       }); 

       // Add control data. 
       $this.data('me', defaults); 
       $this.trigger('onLoad'); // events. 

      } 

     }); 

    }, 

    isPlugin: function() { 
     return true; 
    }, 

    getData: function() { 
     return $(this).data('me'); 
    } 

$.fn.tester = function (method) { 

    // Method calling logic. 
    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.test'); 
    } 

}; 

})(jQuery); 

И я применяю плагин & отслеживать событие щелчка, как это:

$('#poo').tester(); 
$('#poo').on('onClick', function (e) { 
    var $data = e.target.tester('isPlugin'); 
    var dat = e.target.data('me'); 
}); 

Проблема заключается в том, внутри обработки событий я больше не могу получить доступ к плагину. Попытка получить как биты результата данных в Visual Studio рассказывал мне

JavaScript runtime error: Object doesn't support property or method 'tester'

и ...

JavaScript runtime error: Object doesn't support property or method 'data'

Доступ к плагинов данных + методы не внутри события работает просто отлично.

ответ

0

Попробуйте это:

var $data = $(e.target).tester('isPlugin'); 
var dat = $(e.target).data('me'); 

e.target сам по себе ссылается на узел DOM, где вы на самом деле хотите объект JQuery, который использует свой плагин.

+0

Спасибо, Чарли, что сделал трюк. Хотя это должно было быть просто, я пропал! –

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