2013-06-13 3 views
0

Я создал простой JQuery плагин следующим образом:вызова пользовательской функции JQuery плагин

$.fn.greenify = function() { 
    var color = "green"; 
    this.css("color", color); 

    function getColor() { 
     return "green"; 
    } 
}; 

//calling plugin 
$("#test").greenify(); 

То, что я хочу сделать это, чтобы вызвать функцию GetColor(). что-то вроде, как показано ниже:

var v1 = $("#test").greenify(); 
var color = v1.getColor();  

Это, безусловно, не способ сделать это. Как я могу сделать такой звонок?

ответ

1

Хотя это не идиоматическое JQuery сломать chainability, это будет работать:

$.fn.greenify = function() { 
    var color="green"; 
    this.css("color", color); 

    return { 
     getColor: function() { 
      return "green"; 
     } 
    }; 
}; 
+0

просто хотел знать, должно ли оно быть 'this.css()' или '$ (this) .css()'? –

+0

@PalashMondal 'this' будет работать, потому что он ссылается на сам выбор jquery. '$ (this)' будет просто обернуть выбор jquery в выборе jquery. Последний тоже будет работать, но в этом нет необходимости. –

+0

@PalashMondal 'this' будет работать, потому что функция greenify является частью того же объекта, что и .css(). – bipen

2

Вы должны возвращать объект, содержащий функцию:

return { getColor: someFunction }; 
2

Опираясь на @ MattBall отвечают, вы можете поддерживать цепочки, расширяя объект jQuery, который вы передали в контексте плагина.

$.fn.greenify = function() { 
    var color = 'green'; 
    this.getColor = function() { 
     return 'green'; 
    }; 
    return this; 
}; 

// so this will work: 
$('#test').greenify().addClass('used-jquery-method'); 

// but you won't be able to do it again if you select again: 
var color = $('#test').getColor(); // unknown method 

// you'll have to cache it instead, and build from the same 'chain' 
var element = $('#test').greenify().addClass('used-jquery-method'); 
var color = element.getColor(); 
Смежные вопросы