Jquery插件的私有和公共属性
我正在尝试编写我的第一个简单jquery插件,但我不知道如何在jquery对象内创建私有变量。这是代码Jquery插件的私有和公共属性,jquery,jquery-plugins,Jquery,Jquery Plugins,我正在尝试编写我的第一个简单jquery插件,但我不知道如何在jquery对象内创建私有变量。这是代码 var first; var second; $(document).ready(function(){ first = $("#clicker1").demSelector(); second = $("#clicker2").demSelector(); }); $(".totalClicks").click(function(){ alert("Clicks 1 =
var first;
var second;
$(document).ready(function(){
first = $("#clicker1").demSelector();
second = $("#clicker2").demSelector();
});
$(".totalClicks").click(function(){
alert("Clicks 1 = "+first.number());
alert("Clicks 2 = "+second.number());
});
(function($){
var num = 0;
$.fn.demSelector = function() {
return this.each(function(){
init(this);
});
};
$.fn.number = function(){
return num;
};
function init(control){
$(control).on('click','.num-of-clicks', function(){
num = parseInt($(this).html(),0) + 1;
$(this).html(num);
});
}
})(jQuery);
和演示项目
单击“0”时,它会增加并更改变量num。但它会更改第一个和第二个对象的num。所以,在第一行上单击两次并单击按钮“Show”后,我会收到两条消息“clicks 1=2”和“clicks 2=2”,但应该是“clicks 1=2”和“clicks 2=0”。看起来变量num是全局的
我做错了什么?您应该做什么?它使用将数据存储在相关的DOM元素上。大概是这样的:
var first;
var second;
$(document).ready(function(){
first = $("#clicker1").data('count',0);
second = $("#clicker2").data('count',0);
});
$(document).on('click','.clicker', function(){
$(this).data('count',$(this).data('count')+1);
$(this).find('.num-of-clicks').html($(this).data('count'));
});
JavaScript不明确支持公共和私有变量。但是,您可以使用来模拟它们。我知道javascript不支持公共或私有修饰符,但如何使变量“num”对每个对象都是唯一的?这是因为您在事件处理程序中使用回调函数——它正在修改名为
num
的全局变量,并且无法访问您的“private”变量num
。如何使其工作?我真的是stuckSo num=parseInt($(this.html(),0)+1;更改方法init()的“局部”变量num,但不更改另一个num?但还有其他方法吗?编写此代码的原因是为了学习jquery插件和处理插件中的事件。您“私下”将count
数据存储在单击的元素中。无论有没有插件,这都是实现您想要的目标的最佳方式。我所知道的唯一的另一种方法是使用全局变量,这在插件中是绝对要避免的。