jquery.cxSelect插件,新增城市没单位也能显示出来的功能。

具体,请查看修改后的插件代码:(主要是FixNoUnit函数)

/*!
* jQuery cxSelect
* @name jquery.cxselect.js
* @version 1.3.4
* #date 2013-12-18
* @author ciaoca
* @email ciaoca@gmail.com
* @site https://github.com/ciaoca/cxSelect
* @license Released under the MIT license
*/
(function(factory){
if (typeof define === 'function' && define.amd) {
define(['jquery'], factory);
} else {
factory(jQuery);
};
}(function($){
$.cxSelect = function(settings){
var obj;
var settings;
var cxSelect = {
dom: {},
api: {}
}; // 检测是否为 DOM 元素
var isElement = function(o){
if(o && (typeof HTMLElement === 'function' || typeof HTMLElement === 'object') && o instanceof HTMLElement) {
return true;
} else {
return (o && o.nodeType && o.nodeType === 1) ? true : false;
};
}; // 检测是否为 jQuery 对象
var isJquery = function(o){
return (o && o.length && (typeof jQuery === 'function' || typeof jQuery === 'object') && o instanceof jQuery) ? true : false;
}; // 检测是否为数组
var isArray = function(o){
if(!Array.isArray) {
return Object.prototype.toString.call(o) === "[object Array]";
} else {
return Array.isArray(o);
};
}; // 分配参数
for (var i = 0, l = arguments.length; i < l; i++) {
if (isJquery(arguments[i])) {
obj = arguments[i];
} else if (isElement(arguments[i])) {
obj = $(arguments[i]);
} else if (typeof arguments[i] === 'object') {
settings = arguments[i];
};
}; if (obj.length < 1) {return}; cxSelect.init = function(){
var _this = this; _this.dom.box = obj; _this.settings = $.extend({}, $.cxSelect.defaults, settings, {
url: _this.dom.box.data('url'),
nodata: _this.dom.box.data('nodata'),
required: _this.dom.box.data('required'),
firstTitle: _this.dom.box.data('firstTitle'),
firstValue: _this.dom.box.data('firstValue')
}); // 未设置选择器组
if (!_this.settings.selects.length) {return}; _this.selectArray = [];
_this.selectSum = _this.settings.selects.length; for (var i = 0; i < _this.selectSum; i++) {
if (!_this.dom.box.find('select.' + _this.settings.selects[i])) {break}; _this.selectArray.push(_this.dom.box.find('select.' + _this.settings.selects[i]));
}; _this.selectSum = _this.selectArray.length; // 设置的选择器组不存在
if (!_this.selectSum) {return}; // 设置 URL,通过 Ajax 获取数据
if (typeof _this.settings.url === 'string') {
$.getJSON(_this.settings.url, function(json){
_this.dataJson = json;
_this.buildContent();
}); // 设置自定义数据
} else if (typeof _this.settings.url === 'object') {
_this.dataJson = _this.settings.url;
_this.buildContent();
};
}; cxSelect.getIndex = function(n){
return (this.settings.required) ? n : n - 1;
}; // 获取下拉框内容
cxSelect.getNewOptions = function(elemJquery, data){
if (!elemJquery) {return}; var _title = this.settings.firstTitle;
var _value = this.settings.firstValue;
var _dataTitle = elemJquery.data('firstTitle');
var _dataValue = elemJquery.data('firstValue');
var _html = ''; if (typeof _dataTitle === 'string' || typeof _dataTitle === 'number' || typeof _dataTitle === 'boolean') {
_title = _dataTitle.toString();
}; if (typeof _dataValue === 'string' || typeof _dataValue === 'number' || typeof _dataValue === 'boolean') {
_value = _dataValue.toString();
}; if (!this.settings.required) {
_html='<option value="' + _value + '">' + _title + '</option>';
}; $.each(data, function(i, v){
if (typeof(v.v) === 'string' || typeof(v.v) === 'number' || typeof(v.v) === 'boolean') {
_html += '<option value="'+v.v+'">' + v.n + '</option>';
} else {
_html += '<option value="'+v.n+'">' + v.n + '</option>';
};
}); return _html;
}; // 构建选框内容
cxSelect.buildContent = function(){
var _this = this; _this.dom.box.on('change', 'select', function(){
_this.selectChange(this.className);
}); var _html = _this.getNewOptions(_this.selectArray[0], _this.dataJson);
_this.selectArray[0].html(_html).prop('disabled', false).trigger('change'); _this.setDefaultValue();
}; // 设置默认值
cxSelect.setDefaultValue = function(n){
n = n || 0; var _this = this;
var _value; if (n >= _this.selectSum || !_this.selectArray[n]) {return}; _value = _this.selectArray[n].data('value'); //add by ycx --20160114//see FixNoUnit 函数
//_value=FixNoUnit(_value); if (typeof _value === 'string' || typeof _value === 'number' || typeof _value === 'boolean') {
_value = _value.toString(); setTimeout(function(){
_this.selectArray[n].val(_value).trigger('change');
n++;
_this.setDefaultValue(n);
}, 1);
};
}; // 改变选择时的处理
cxSelect.selectChange = function(name){
name = name.replace(/ /g,',');
name = ',' + name + ','; var selectValues=[];
var selectIndex;
var selectNext;
var selectData;
var _html; // 获取当前 select 位置、选择值,并清空后面的 select
for (var i = 0; i < this.selectSum; i++) {
selectValues.push(this.getIndex(this.selectArray[i].get(0).selectedIndex)); if (typeof selectIndex === 'number' && i > selectIndex) {
this.selectArray[i].empty().prop('disabled', true); if (this.settings.nodata === 'none') {
this.selectArray[i].css('display', 'none');
} else if(this.settings.nodata === 'hidden') {
this.selectArray[i].css('visibility', 'hidden');
};
}; if (name.indexOf(',' + this.settings.selects[i] + ',') > -1) {
selectIndex = i;
};
}; // 获取下级的列表数据
selectNext = selectIndex + 1;
selectData = this.dataJson; for (var i = 0; i < selectNext; i++){
if (typeof selectData[selectValues[i]] === 'undefined' || isArray(selectData[selectValues[i]].s) === false || !selectData[selectValues[i]].s.length) {
return;
};
selectData = selectData[selectValues[i]].s;
}; // 遍历数据写入下拉选框
if (this.selectArray[selectNext]) {
_html = this.getNewOptions(this.selectArray[selectNext], selectData);
this.selectArray[selectNext].html(_html).prop('disabled', false).css({'display':'', 'visibility':''}).trigger('change');
};
}; cxSelect.init(); return this;
}; // 默认值
$.cxSelect.defaults = {
selects: [], // 下拉选框组
url: null, // 列表数据文件路径,或设为对象
nodata: null, // 无数据状态
required: false, // 是否为必选
firstTitle: '请选择', // 第一个选项选项的标题
firstValue: '0' // 第一个选项的值
}; $.fn.cxSelect = function(settings, callback){
this.each(function(i){
$.cxSelect(this, settings, callback);
});
return this;
}; /**
* 修复 没有城市单位的bug
* 也就是,如果输入是广东,广州,则显示不出来。因为json数据中,是有单位的:广东省,广州市。
*
* 下面代码,还没做完。不过,基本思路就是这样的了。
*
* @author ycx
* @time 20160114
*
*/
var province = {};
var FixNoUnit = function(value) {
if (province.bj === true) {//北京
if (value.indexOf('密云') >= 0 || value.indexOf('延庆') >= 0) {
value += '县';
} else {
value += '区';
}
province.bj = false;
} else if (province.tj === true) {//天津
if (value.indexOf('静海') >= 0 || value.indexOf('蓟') >= 0) {
value += '县';
} else {
value += '区';
}
province.tj = false;
} else if (province.hb === true) {//河北
value += '市';
province.hb = false;
} else if (province.sx === true) {//山西
value += '市';
province.tj = false;
} else if (province.nmg === true) {//内蒙古
if (value.indexOf('兴安') >= 0 || value.indexOf('锡林郭勒') >= 0 || value.indexOf('阿拉善') >= 0) {
value += '盟';
} else {
value += '市';
}
province.nmg = false;
} else if (province.ln === true) {//辽宁
value += '市';
province.ln = false;
} else if (province.jl === true) {//吉林
if (value.indexOf('延边朝鲜族') >= 0) {
value += '自治州';
} else {
value += '市';
}
province.jl = false;
} else if (province.hlj === true) {//黑龙江
if (value.indexOf('大兴安岭') >= 0) {
value += '地区';
} else {
value += '市';
}
province.hlj = false;
}
//还有其他省份... if (value === '北京') {
value += '市';
province.bj = true;
} else if (value === '天津') {
value += '市';
province.bj = true;
} else if (value === '河北') {
value += '省';
province.hb = true;
} else if (value === '山西') {
value += '省';
province.sx = true;
} else if (value === '内蒙古') {
value += '自治区';
province.nmg = true;
} else if (value === '辽宁') {
value += '省';
province.ln = true;
} else if (value === '吉林') {
value += '省';
province.jl = true;
} else if (value === '黑龙江') {
value += '省';
province.hlj = true;
}
//还有其他省份... return value;
};
}));

jquery.cxSelect插件,城市没单位的更多相关文章

  1. PHP结合jQuery.autocomplete插件实现输入自动完成提示的功能

    XHTML 首先将jquery库和相关ui插件,以及css导入.一共引用三个 jquery ,jquery_ui.js,jquery-ui.css 三个文件,不同版本小哥可能稍有差异(最后注意ajax ...

  2. noty – jQuery通知插件

    noty是一个jQuery的通知(信息提示)插件,灵活轻便,是一个非常棒的用于替代传统提示对话框的插件. 当前最新版本为2.1.0: 从https://github.com/needim/noty 可 ...

  3. Jquery相册插件(开源下载)

    一,导言 上次 “不定义JQuery插件,不要说会JQuery” 的博客写的肤浅,漏洞百出,而且最重要的是从理论上说如何定义一个jQuery插件,没有实质性的写一个jQuery插件出来,这未免是纸上谈 ...

  4. JQuery 定时器 (Jquery Timer 插件)

      jQuery Timers插件地址: http://plugins.jquery.com/project/timers JQuery Timers应用知识提供了三个函式1. everyTime(时 ...

  5. html5网页动画总结--jQuery旋转插件jqueryrotate

    CSS3 提供了多种变形效果,比如矩阵变形.位移.缩放.旋转和倾斜等等,让页面更加生动活泼有趣,不再一动不动.然后 IE10 以下版本的浏览器不支持 CSS3 变形,虽然 IE 有私有属性滤镜(fil ...

  6. qTip2 精致的jQuery提示信息插件

    qTip2 精致的jQuery提示信息插件    出处:http://www.cnblogs.com/lwme/archive/2012/02/16/qtip2-jquery-plugin.html ...

  7. 自己diy一个jquery分页插件

    js基础学习过程中,期间经历换工作的各种面试,很多面试官问过:有没有写过jquery插件?等类似问题. 就个人而言,关于jquery插件的文章确实看过不少,但是一直没有动手写一个,一是不想在目前学习j ...

  8. AudioPlayer.js,一个响应式且支持触摸操作的jquery音频插件

    AudioPlayer.js是一个响应式.支持触摸操作的HTML5 的音乐播放器.本文是对其官网的说用说明文档得翻译,博主第一次翻译外文.不到之处还请谅解.之处. JS文件地址:http://osva ...

  9. 基于Bootstrap的超酷jQuery开关按钮插件

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJgAAAA2CAIAAAC0tsfoAAAB/0lEQVR4nO3bQWrCQBTGcc/mbVz0DD

随机推荐

  1. An Ordinary Game(简单推导)

    An Ordinary Game Time limit : 2sec / Memory limit : 256MB Score : 500 points Problem Statement There ...

  2. CF451E Devu and Flowers(容斥)

    CF451E Devu and Flowers(容斥) 题目大意 \(n\)种花每种\(f_i\)个,求选出\(s\)朵花的方案.不一定每种花都要选到. \(n\le 20\) 解法 利用可重组合的公 ...

  3. 通过设置PHPSESSID保存到cookie实现免登录

    $cookieParams = session_get_cookie_params(); session_set_cookie_params( 3600,// 设置sessionID在cookie中保 ...

  4. Javascript中闭包的个人理解

       Javascript的一个特殊点就在于它的闭包和回调特性,这两个特性让初学Javascript的我是云里雾里,至今仍在苦苦摸索与理解.在一番苦思之后,整理了一下资料,将自己的理解思路记录下来,以 ...

  5. 【leetcode刷题笔记】Unique Paths II

    Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How m ...

  6. <再看TCP/IP第一卷>关于网络层及协议细节---ICMP协议几个要注意的地方

    在TCP/IP协议族中,ICMP协议是一个介于网络层和传输层中间的一个协议,许多材料都会认为ICMP是网络层的一个部分,但是ICMP协议的报头是被包裹在IP协议之中的,而UDP协议又可以被ICMP协议 ...

  7. poj 1328 Radar Installatio【贪心】

    题目地址:http://poj.org/problem?id=1328 Sample Input 3 2 1 2 -3 1 2 1 1 2 0 2 0 0 Sample Output Case 1: ...

  8. CSS整体布局

    主要内容: 一.外边距margin与填充padding 二.浮动float与显示display 三.主布局 四.定位方式posotion 一.外边距margin与填充padding 1.margin设 ...

  9. [Vue] 初识Vue-常用指令

    Vue Vue是一套用于构建用户界面的渐进式框架, Vue的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合.Vue是一个JavaScript MVVM库, 以数据驱动和组件化的思想构 ...

  10. systemd基本使用

    参考金步国翻译的systemd中文手册: http://www.jinbuguo.com/systemd/index.html 金步国翻译质量都很高, 非常适合做参考 原文:https://wiki. ...