/** * * @author 李凯飞 * * 描述:选择时间组件,先选择小时再选择分钟,只支持00-23小时、00-05-10...50-55分钟。回调函数的e为源对象。 * * 示例如下: * * $("#timePicker").hunterTimePicker(); * * $('.time-picker').hunterTimePicker({ * callback: function(e){ * .... * } * }); * */ (function ($) { $.hunterTimePicker = function (box, options) { var dates = { hour: ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23'], minute: ['00', '05', '10', '15', '20', '25', '30', '35', '40', '45', '50', '55'], }; var box = $(box); var template = $('
'); var time_wrap = $('#Hunter_time_wrap', template); $(document).click(function() { template.remove(); }); box.click(function(event){ event.preventDefault(); event.stopPropagation(); $('.Hunter-time-picker').remove(); var _this = $(this); var offset = _this.offset(); var top = offset.top + _this.outerHeight() + 15; template.css({ 'left': offset.left, 'top': top }); buildTimePicker(); $('body').append(template); $('.Hunter-time-picker').click(function(event){ event.preventDefault(); event.stopPropagation(); }); }); function buildTimePicker(){ buildHourTpl(); hourEvent(); minuteEvent(); cleanBtnEvent(); }; function buildHourTpl(){ var hour_html = '

小时

'; for(var i = 0; i < dates.hour.length; i++){ var temp = box.val().split(":")[0]; if(dates.hour[i]==temp){ hour_html += '
  • ' + dates.hour[i] + '
  • '; }else{ hour_html += '
  • ' + dates.hour[i] + '
  • '; } } hour_html += '
  • ' time_wrap.html(hour_html); }; function buildMinuteTpl(cur_time){ var poi = cur_time.position(); var minute_html = '

    分钟

    '; var temp = box.val().split(":")[1]; for(var j = 0; j < dates.minute.length;j++){ if(dates.minute[j]==temp){ minute_html += '
  • ' + dates.minute[j] + '
  • '; }else{ minute_html += '
  • ' + dates.minute[j] + '
  • '; } } cur_time.find('.Hunter-minute-wrap').html(minute_html).css('left', '-' + (poi.left - 37) + 'px').show(); }; function hourEvent(){ time_wrap.on('click', '.Hunter-hour', function(event){ event.preventDefault(); event.stopPropagation(); var _this = $(this); time_wrap.find('.Hunter-hour').removeClass('active'); time_wrap.find('.Hunter-hour-name').removeClass('active'); time_wrap.find('.Hunter-minute-wrap').hide().children().remove(); _this.addClass('active'); _this.find('.Hunter-hour').addClass('active'); var hourValue = _this.data('hour'); var temp = box.val().split(":"); if(temp.length > 1){ box.val(hourValue+":"+temp[1]); }else{ box.val(hourValue+":00"); } buildMinuteTpl(_this); if(options.callback) options.callback(box); return false; }); }; function minuteEvent(){ time_wrap.on('click', '.Hunter-minute', function(event) { event.preventDefault(); event.stopPropagation(); var _this = $(this); var minuteValue = _this.data('minute'); var temp = box.val().split(":")[0]+":"+minuteValue; box.val(temp); template.remove(); if(options.callback) options.callback(box); return false; }); }; function cleanBtnEvent(){ time_wrap.on('click', '#Hunter_clean_btn', function(event){ event.preventDefault(); event.stopPropagation(); box.val(''); template.remove(); if(options.callback) options.callback(box); return false; }); }; }; $.fn.extend({ hunterTimePicker: function (options) { options = $.extend({}, options); this.each(function () { new $.hunterTimePicker(this, options); }); return this; } }); })(jQuery);