Javascript jquery插件有多个实例
我正在尝试创建一个简单的jQuery插件,它允许一个“时间选择器”的多个实例。我过去没有做过很多JavaScript OOP,所以我认为创建它对我来说将是一次极好的学习经历。尽管如此,我似乎无法理解为什么我更改时间时所有实例都会受到影响。这是我在StackOverflow上的第一篇帖子,请耐心等待。 代码如下:Javascript jquery插件有多个实例,javascript,jquery,oop,Javascript,Jquery,Oop,我正在尝试创建一个简单的jQuery插件,它允许一个“时间选择器”的多个实例。我过去没有做过很多JavaScript OOP,所以我认为创建它对我来说将是一次极好的学习经历。尽管如此,我似乎无法理解为什么我更改时间时所有实例都会受到影响。这是我在StackOverflow上的第一篇帖子,请耐心等待。 代码如下: (函数($){ //辅助函数 if(typeof String.prototype.endsWith!=“函数”){ String.prototype.endsWith=函数(str)
(函数($){
//辅助函数
if(typeof String.prototype.endsWith!=“函数”){
String.prototype.endsWith=函数(str){
返回str.length>0&&this.substring(this.length-str.length,this.length)==str;
}
}
//查找区域是否在可单击列表中
var findOne=函数(干草堆,arr){
返回arr.some(函数(v){
返回草垛。indexOf(v)>=0;
});
};
var Timepicker=函数(元素、选项){
这是默认值={
现在:新日期()
};
this.element=$(element);
这是.createTimepicker();
this.options=$.extend({},this.defaults,options);
this.timepicker=$('.wicked picker');//选择器的外部部分
this.up=$('.wicked-picker\uuuu controls\uuu control-up');//up控件
this.down=$('.wicked-picker__-controls__-control-down');//向下控件
this.hoursElem=$('.wicked-picker\uuuuu-controls\uuuu-control--hours');//小时文本
this.minutesElem=$('.wicked-picker\uuuu controls\uuu control--minutes');//分钟文本
this.meridiemElem=$('.wicked-picker__控制_控制--meridiem');//am或pm文本
this.canClick=['timepicker',this.timepicker.selector.substring(1),this.up.selector.substring(1),this.down.selector.substring(1),this.hoursElem.selector.substring(1),this.minutesElem.selector.substring(1),this.meridiemElem.selector.substring(1)];//可点击区域
this.selectedHour=((this.defaults.now.getHours()+11)%12)+1;//默认小时数
this.selectedMin=((this.defaults.now.getMinutes()<10)?“0”:“”)+this.defaults.now.getMinutes();//默认分钟数
this.selectedMeridiem=(this.defaults.now.getHours>12)?'PM':'AM';//诽谤者
this.attach(元素);//将事件附加到此元素
};
$.extend(Timepicker.prototype={
showTimepicker:函数(元素){
var timepickerPos=this.element.offset();
//将时间设置为默认时间(现在)
这个.setText(元素);
//如果计时器选择器的时间与输入字段的时间不同,请更改它
if(this.getText(元素)!==this.getTime()){
var inputTime=this.getText(元素).replace(':','').split('');
var newTime=新日期();
newTime.setHours(输入时间[0]);
newTime.setMinutes(输入时间[2]);
这是设置时间(newTime);
}
//定位
这个是.timepicker.css({
“z-index”:this.element.zIndex()+1,
位置:'绝对',
左:timepickerPos.left,
顶部:timepickerPos.top+element.target.offsetHeight+5
}).show();
//时间上升/下降事件
//很可能是有问题的区域
//需要知道哪个实例
$(this.up).on('click',$.proxy(this.changeValue,this,'+',element));
$(this.down).on('click',$.proxy(this.changeValue,this,'-',element));
},
hideTimepicker:函数(元素){
var targetClass=element.target.className.split(“”);
//隐藏前检查该区域是否可单击
if(findOne(targetClass,this.canClick)==false){
this.timepicker.hide();
}
},
//每页仅创建一个时间选择器
createTimepicker:函数(){
如果($('.wicked picker')。长度===0)
$('body')。追加('p class=“wicked-picker\uuu title”>计时器选择器- 00
- 00
- ;
},
//附加显示和隐藏选择器事件
附件:功能(元素){
$(element).on('focus',$.proxy(this.showTimepicker,this));
$('body')。在('click',$.proxy(this.hideTimepicker,this));
},
//设置计时器选择器的时间
设置时间:函数(时间){
这是.setHours(time.getHours());
this.setMinutes(time.getMinutes());
这个。setMeridiem();
},
//以H:MM:AM | | | PM的形式获取时间选择器的时间
getTime:function(){
返回[this.getHours+':'+this.getMinutes()+''+this.getMeridiem()];
},
//设置时间选择器和输入字段的小时数
设置小时数:功能(小时){
var hour=新日期();
小时。设定小时(小时);
var hoursText=((hour.getHours()+11)%12)+1;
this.hoursElem.text(hoursText);
this.selectedHour=小时文本;
},
//设置计时器的时间
getHours:function(){
var小时数=新日期();
hours.setHours(this.hoursElem.text());
return hours.getHours();
},
//设置时间选择器和输入字段的分钟数
setMinutes:函数(分钟){
var minute=新日期();
分钟。设置分钟(分钟);
var minutesText=minute.getMinutes();
var min=((minutext<10)?'0':'')+minutext;
此.minutesElem.text(分钟);
this.selectedMin=min;
},
//设置计时器的分钟数
getMinutes:function(){
var minutes=新日期();
minutes.setMinutes(this.minutesElem.text());
var minutesText=minutes.getMinutes();
返回((minutext<10)“'0':'')+minutext;
},
//设置时间选择器和输入字段的meridiem
setMeridiem:function(){
var meridiem=this.getMeridiem();
变量newMeridiem=(meridiem=='PM')?'AM':'PM';
这个.meridiemElem.text(newMeridiem);
this.selectedMeridiem=newMeridiem;
},
//设置时间选择器的meridiem
getMeridiem:function(){
返回这个.meridiemElem.text();
},
$(this.up).on('click', $.proxy(this.changeValue, this, '+', element));
$(this.down).on('click', $.proxy(this.changeValue, this, '-', element));
$(this.up).off('click').on('click', $.proxy(this.changeValue, this, '+', element));
$(this.down).off('click').on('click', $.proxy(this.changeValue, this, '-', element));