/** * yvan.yvcheck.js * @author luoyifan * 2019-07-14 11:14:00 */ 'use strict'; (function ($) { function init(target) { var state = $.data(target, 'yvcheck'); var option = state.options; var $dom = $(target); $dom.on('click.checkbox keydown', function (event) { if (event.type === "keydown") { if (event.keyCode !== 32) { return; } } if (state.checked) { $dom.yvcheck('uncheck'); if ($.type(option.onChange) === 'function') { option.onChange.call(this, option.off, event); } } else { $dom.yvcheck('check'); if ($.type(option.onChange) === 'function') { option.onChange.call(this, option.on, event); } } }); } $.fn.yvcheck = function (options, param) { if (typeof options == 'string') { var method = $.fn.yvcheck.methods[options]; if (method) { var args = [this]; for (var i = 1; i < arguments.length; i++) { args.push(arguments[i]); } return method.apply(this, args); } else { console.error('not found method:' + options); } } options = options || {}; return this.each(function () { var state = $.data(this, 'yvcheck'); if (state) { $.extend(state.options, options); } else { $.data(this, 'yvcheck', { options: $.extend({}, $.fn.yvcheck.defaults, options) }); } init(this); }); }; $.fn.yvcheck.methods = { checked: function (jq) { var state = $.data(jq[0], 'yvcheck'); return state.checked; }, check: function (jq) { jq.each(function () { var state = $.data(this, 'yvcheck'); state.checked = true; $(this).find('.yvan-checkbox').addClass('yvan-checked'); }); }, uncheck: function (jq) { jq.each(function () { var state = $.data(this, 'yvcheck'); state.checked = false; $(this).find('.yvan-checkbox').removeClass('yvan-checked'); }); }, getValue: function (jq) { var state = $.data(jq[0], 'yvcheck'); var option = state.options; if (jq.yvcheck('checked')) { if ($.type(option.on) === 'undefined') { return true; } return option.on; } else { if ($.type(option.off) === 'undefined') { return false; } return option.off; } }, setValue: function (jq, value) { jq.each(function () { var state = $.data(this, 'yvcheck'); var option = state.options; if (value === true || value === option.on) { jq.yvcheck('check'); } else { jq.yvcheck('uncheck'); } }); }, }; $.fn.power.defaults.xtype.yvcheck = function ($targetDOM, option) { var $dom = $('
' + '
' + '' + '
' + '
').appendTo($targetDOM); return $dom.yvcheck(option); }; $.fn.yvcheck.defaults = { on: 'TRUE', off: 'FALSE' }; })(jQuery);