Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery插件有多个实例_Javascript_Jquery_Oop - Fatal编程技术网

Javascript jquery插件有多个实例

Javascript jquery插件有多个实例,javascript,jquery,oop,Javascript,Jquery,Oop,我正在尝试创建一个简单的jQuery插件,它允许一个“时间选择器”的多个实例。我过去没有做过很多JavaScript OOP,所以我认为创建它对我来说将是一次极好的学习经历。尽管如此,我似乎无法理解为什么我更改时间时所有实例都会受到影响。这是我在StackOverflow上的第一篇帖子,请耐心等待。 代码如下: (函数($){ //辅助函数 if(typeof String.prototype.endsWith!=“函数”){ String.prototype.endsWith=函数(str)

我正在尝试创建一个简单的jQuery插件,它允许一个“时间选择器”的多个实例。我过去没有做过很多JavaScript OOP,所以我认为创建它对我来说将是一次极好的学习经历。尽管如此,我似乎无法理解为什么我更改时间时所有实例都会受到影响。这是我在StackOverflow上的第一篇帖子,请耐心等待。 代码如下:

(函数($){
//辅助函数
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));