From d930cce466753534586d03712c3524b04f64d34f Mon Sep 17 00:00:00 2001 From: "eko.zhan" Date: Mon, 27 Mar 2017 16:56:36 +0800 Subject: [PATCH] - remove attchange required --- README.md | 5 +- example/checkbox.html | 6 +- js/attrchange.js | 124 ------------------------------------ js/attrchange_ext.js | 97 ---------------------------- js/jquery.kbase.checkbox.js | 90 +++++++++++--------------- 5 files changed, 41 insertions(+), 281 deletions(-) delete mode 100644 js/attrchange.js delete mode 100644 js/attrchange_ext.js diff --git a/README.md b/README.md index 8cc4712..d62f5da 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,7 @@ Checkbox/Radio 插件 使用方法 ------------------------------------------------- -该插件依赖于 [jquery](http://jquery.com/),[attrchange](http://meetselva.github.io/),attrchange插件无需独立引入,只引入jquery.kbase.checkbox.js即可 - +该插件依赖于 [jquery](http://jquery.com/) ``` ``` @@ -17,6 +16,8 @@ Checkbox/Radio 插件 $(':checkbox').kbsElem(); $(':radio').kbsElem(); $('#btnRadio').kbsElem(); //不会做初始化 + +$('input[name="opt"]').kbsElem('checked'); //选中/不选中 ``` Demo -------------------------------------------------- diff --git a/example/checkbox.html b/example/checkbox.html index fcaefec..3b18694 100644 --- a/example/checkbox.html +++ b/example/checkbox.html @@ -46,11 +46,7 @@ } }); $('#btnSelAll').click(function(){ - if ($(this).attr('checked')){ - $('input[name="opt"]').attr('checked', 'checked'); - }else{ - $('input[name="opt"]').removeAttr('checked'); - } + $('input[name="opt"]').kbsElem('checked'); }); diff --git a/js/attrchange.js b/js/attrchange.js deleted file mode 100644 index 00878d3..0000000 --- a/js/attrchange.js +++ /dev/null @@ -1,124 +0,0 @@ -/* -A simple jQuery function that can add listeners on attribute change. -http://meetselva.github.io/attrchange/ - -About License: -Copyright (C) 2013-2014 Selvakumar Arumugam -You may use attrchange plugin under the terms of the MIT Licese. -https://github.com/meetselva/attrchange/blob/master/MIT-License.txt - */ -(function($) { - function isDOMAttrModifiedSupported() { - var p = document.createElement('p'); - var flag = false; - - if (p.addEventListener) { - p.addEventListener('DOMAttrModified', function() { - flag = true - }, false); - } else if (p.attachEvent) { - p.attachEvent('onDOMAttrModified', function() { - flag = true - }); - } else { return false; } - p.setAttribute('id', 'target'); - return flag; - } - - function checkAttributes(chkAttr, e) { - if (chkAttr) { - var attributes = this.data('attr-old-value'); - - if (e.attributeName.indexOf('style') >= 0) { - if (!attributes['style']) - attributes['style'] = {}; //initialize - var keys = e.attributeName.split('.'); - e.attributeName = keys[0]; - e.oldValue = attributes['style'][keys[1]]; //old value - e.newValue = keys[1] + ':' - + this.prop("style")[$.camelCase(keys[1])]; //new value - attributes['style'][keys[1]] = e.newValue; - } else { - e.oldValue = attributes[e.attributeName]; - e.newValue = this.attr(e.attributeName); - attributes[e.attributeName] = e.newValue; - } - - this.data('attr-old-value', attributes); //update the old value object - } - } - - //initialize Mutation Observer - var MutationObserver = window.MutationObserver - || window.WebKitMutationObserver; - - $.fn.attrchange = function(a, b) { - if (typeof a == 'object') {//core - var cfg = { - trackValues : false, - callback : $.noop - }; - //backward compatibility - if (typeof a === "function") { cfg.callback = a; } else { $.extend(cfg, a); } - - if (cfg.trackValues) { //get attributes old value - this.each(function(i, el) { - var attributes = {}; - for ( var attr, i = 0, attrs = el.attributes, l = attrs.length; i < l; i++) { - attr = attrs.item(i); - attributes[attr.nodeName] = attr.value; - } - $(this).data('attr-old-value', attributes); - }); - } - - if (MutationObserver) { //Modern Browsers supporting MutationObserver - var mOptions = { - subtree : false, - attributes : true, - attributeOldValue : cfg.trackValues - }; - var observer = new MutationObserver(function(mutations) { - mutations.forEach(function(e) { - var _this = e.target; - //get new value if trackValues is true - if (cfg.trackValues) { - e.newValue = $(_this).attr(e.attributeName); - } - if ($(_this).data('attrchange-status') === 'connected') { //execute if connected - cfg.callback.call(_this, e); - } - }); - }); - - return this.data('attrchange-method', 'Mutation Observer').data('attrchange-status', 'connected') - .data('attrchange-obs', observer).each(function() { - observer.observe(this, mOptions); - }); - } else if (isDOMAttrModifiedSupported()) { //Opera - //Good old Mutation Events - return this.data('attrchange-method', 'DOMAttrModified').data('attrchange-status', 'connected').on('DOMAttrModified', function(event) { - if (event.originalEvent) { event = event.originalEvent; }//jQuery normalization is not required - event.attributeName = event.attrName; //property names to be consistent with MutationObserver - event.oldValue = event.prevValue; //property names to be consistent with MutationObserver - if ($(this).data('attrchange-status') === 'connected') { //disconnected logically - cfg.callback.call(this, event); - } - }); - } else if ('onpropertychange' in document.body) { //works only in IE - return this.data('attrchange-method', 'propertychange').data('attrchange-status', 'connected').on('propertychange', function(e) { - e.attributeName = window.event.propertyName; - //to set the attr old value - checkAttributes.call($(this), cfg.trackValues, e); - if ($(this).data('attrchange-status') === 'connected') { //disconnected logically - cfg.callback.call(this, e); - } - }); - } - return this; - } else if (typeof a == 'string' && $.fn.attrchange.hasOwnProperty('extensions') && - $.fn.attrchange['extensions'].hasOwnProperty(a)) { //extensions/options - return $.fn.attrchange['extensions'][a].call(this, b); - } - } -})(jQuery); \ No newline at end of file diff --git a/js/attrchange_ext.js b/js/attrchange_ext.js deleted file mode 100644 index d761892..0000000 --- a/js/attrchange_ext.js +++ /dev/null @@ -1,97 +0,0 @@ -/* -An extension for attrchange jQuery plugin -http://meetselva.github.io/attrchange/ - -About License: -Copyright (C) 2013-2014 Selvakumar Arumugam -You may use attrchange ext plugin under the terms of the MIT Licese. -https://github.com/meetselva/attrchange/blob/master/MIT-License.txt - */ -$.fn.attrchange.extensions = { /*attrchange option/extension*/ - disconnect: function (o) { - if (typeof o !== 'undefined' && o.isPhysicalDisconnect) { - return this.each(function() { - var attrchangeMethod = $(this).data('attrchange-method'); - if (attrchangeMethod == 'propertychange' || attrchangeMethod == 'DOMAttrModified') { - $(this).off(attrchangeMethod); - } else if (attrchangeMethod == 'Mutation Observer') { - $(this).data('attrchange-obs').disconnect(); - } else if (attrchangeMethod == 'polling') { - clearInterval($(this).data('attrchange-polling-timer')); - } - }).removeData(['attrchange-method', 'attrchange-status']); - } else { //logical disconnect - return this.data('attrchange-status', 'disconnected'); //set a flag that prevents triggering callback onattrchange - } - }, - remove: function (o) { - return $.fn.attrchange.extensions['disconnect'].call(this, {isPhysicalDisconnect: true}); - }, - getProperties: function (o) { - var attrchangeMethod = $(this).data('attrchange-method'); - var pollInterval = $(this).data('attrchange-pollInterval'); - return { - method: attrchangeMethod, - isPolling: (attrchangeMethod == 'polling'), - pollingInterval: (typeof pollInterval === 'undefined')?0:parseInt(pollInterval, 10), - status: (typeof attrchangeMethod === 'undefined')?'removed': $(this).data('attrchange-status') - } - }, - reconnect: function (o) {//reconnect possible only when there is a logical disconnect - return this.data('attrchange-status', 'connected'); - }, - polling: function (o) { - if (o.hasOwnProperty('isComputedStyle') && o.isComputedStyle == 'true') { /* extensive and slow - polling to check on computed style properties */ - return this.each(function(i, _this) { - if (!o.hasOwnProperty('properties') || - Object.prototype.toString.call(o.properties) !== '[object Array]' || - o.properties.length == 0) { return false; } //return if no properties found - var attributes = {}; //store computed properties - for (var i = 0; i < o.properties.length; i++) { - attributes[o.properties[i]] = $(this).css(o.properties[i]); - } - var _this = this; - $(this).data('attrchange-polling-timer', setInterval(function () { - var changes = {}, hasChanges = false; // attrName: { oldValue: xxx, newValue: yyy} - for (var comuptedVal, i = 0; i < o.properties.length; i++){ - comuptedVal = $(_this).css(o.properties[i]); - if (attributes[o.properties[i]] !== comuptedVal) { - hasChanges = true; - changes[o.properties[i]] = {oldValue: attributes[o.properties[i]], newValue: comuptedVal}; - attributes[o.properties[i]] = comuptedVal //add the attribute to the orig - } - } - if (hasChanges && $(_this).data('attrchange-status') === 'connected') { //disconnected logically - o.callback.call(_this, changes); - } - }, (o.pollInterval)?o.pollInterval: 1000)).data('attrchange-method', 'polling').data('attrchange-pollInterval', o.pollInterval).data('attrchange-status', 'connected'); - }); - } else { - return this.each(function(i, _this) { /* this one is programmatic polling */ - var attributes = {}; - for (var attr, i=0, attrs=_this.attributes, l=attrs.length; i