Git Product home page Git Product logo

cxselect's Introduction

cxSelect

cxSelect 是基于 jQuery 的多级联动菜单插件,适用于省市、商品分类等联动菜单。

列表数据通过 AJAX 获取,也可以自定义,数据内容使用 JSON 格式。

同时兼容 Zepto,方便在移动端使用。

版本:

  • jQuery v1.7+ || Zepto v1.0+
  • jQuery cxSelect v1.4.2

Demo: http://ciaoca.github.io/cxSelect/

使用方法

载入 JavaScript 文件

<script src="jquery.js"></script>
<script src="jquery.cxselect.js"></script>

DOM 结构

<!--
select 必须放在元素 id="element_id" 的内部,不限层级
select 的 class 任意取值,也可以附加多个 class,如 class="province otherclass",在调用时只需要输入其中一个即可,但是不能重复
-->
<div id="element_id">
  <select class="province"></select>
  <select class="city"></select>
  <select class="area"></select>
</div>

设置默认值

<!--
方法一:使用 option 的 value 和 selected 属性
--> 
<select class="province"> 
  <option value="浙江省" selected>浙江省</option> 
</select> 
 
<!--
方法二:使用 select 的 data-value 属性
当同时设置 option 的 value 和 select 的 data-value 时,优先使用 data-value 的值
--> 
<select class="province" data-value="浙江省"></select> 

调用 cxSelect

$('#element_id').cxSelect({
  url: 'cityData.min.json',
  selects: ['province', 'city', 'area'],  // selects 为数组形式,请注意顺序
  emptyStyle: 'none'
});

设置参数全局默认值

$.cxSelect.defaults.url = 'cityData.min.json';
$.cxSelect.defaults.emptyStyle = 'none';

参数说明

名称 默认值 说明
selects [] 下拉选框组。
输入 select 的 className
url null 整合数据接口地址(URL)
data null 自定义数据,类型为数组,使用 JSON 格式。
emptyStyle null 子集无数据时 select 元素的显示状态。
可设置为:"none"(display:none), "hidden"(visibility:hidden)
required false 是否为必选。
设为 false 时,会在列表头部添加 <option value="{firstValue}">{firstTitle}</option> 选项。
firstTitle '请选择' 选框第一个项目的标题(仅在 requiredfalse 时有效)
firstValue '' 选框第一个项目的值(仅在 requiredfalse 时有效)
jsonSpace '' 数据命名空间
jsonName 'n' 数据标题字段名称(用于 option 的标题)
jsonValue '' 数据值字段名称(用于 option 的 value,没有值字段时使用标题作为 value)
jsonSub 's' 子集数据字段名称

data 属性参数

父元素的 data- 属性

<div id="element_id" data-url="cityData.min.json" data-required="true"></div>
名称 说明
data-selects 下拉选框组。
输入 select 的 className,使用英文逗号分隔的字符串
data-url 列表数据接口地址
data-empty-style 子集无数据时 select 的显示状态
data-required 是否为必选
data-first-title 选框第一个项目的标题
data-first-value 选框第一个项目的值
data-json-space 数据命名空间
data-json-name 数据标题字段名称
data-json-value 数据值字段名称
data-json-sub 子集数据字段名称

select 元素的 data- 属性

<select class="province" data-value="浙江省" data-first-title="选择省"></select>
名称 说明
data-value 默认选中值
data-url 当前选框的数据接口,详见 DEMO
data-required 是否为必选
data-query-name 传递上一个选框值的参数名称(默认使用上一个选框的 name 属性值)
data-first-title 选框第一个项目的标题
data-first-value 选框第一个项目的值
data-json-space 数据命名空间
data-json-name 数据标题字段名称
data-json-value 数据值字段名称

API 接口

var cxSelectApi;

// 方法一:
cxSelectApi = $.cxSelect($('#element_id'), {
  selects: ['province', 'city', 'area']
});

// 方法二:
$('#element_id').cxSelect({
  selects: ['province', 'city', 'area']
}, function(api) {
  cxSelectApi = api;
});

cxSelectApi.attach();
cxSelectApi.detach();
cxSelectApi.clear();
cxSelectApi.setOptions();
名称 说明
attach() 绑定。
调用时会自动进行绑定,用于使用 detach 解除绑定后,进行重新绑定。
detach() 解除绑定。
解除绑定后,不再具有联动效果。
clear(index) 清空选项。
清空第 index 个 select 自身及之后的 select 的选项。
index: select 的序号,从 0 开始
setOptions(settings) 重新设置参数。
settings: 与调用时参数一致

自定义数据

可以使用任何类型的数据作为值,但最终都会被转化为文本。

各选项数据接口独立

可以为每个select设置一个接口,根据接口返回的数据结构,设置json-spacejson-namejson-value适应 JSON 结构。 当页面加载时,第一个选框已有选项数据,可以不设置第一个选框的接口。

独立接口示例

数据来源

cityData.json

国内城市数据来源:2019年中华人民共和国行政区划代码(截止2019年12月31日)

cityData-simple.json

国内城市简称版本 不包含:

  • 一级 省、市、区
  • 二级 市、区、县、盟、州

globalData.json

全球主要城市数据来源:整理国内常用网站和软件 Date: 2014.07.29

cxselect's People

Contributors

ciaoca avatar fancyoung avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cxselect's Issues

有方法能把值写回到选择框去吗

我这有一个页面  每次打开时会从数据库中取这一条的省市区数据  但是我没找到能把数据写到选择框中的方法

由于页面用ajax的方式取数据 所以需要在csSelect实例化之后才能写入数据 不知道有没有相关的方法

required的控制对象

如省市区联动中,我常常遇到的一个需求就是,省是非必选的,但是如果选中了省,那么市与区都会自动选择第一个作为默认值,所以在子级联项中就不应该有firstTitle。
如果将其扩展成给每一个selects都配置自己的配置对象{name:?, required:?}就更好了。

HTML5的data自定义属性大写问题

version 1.4.2
_queryName = self.selectArray[j].data('queryName');
data-queryName 浏览器会自动转为小写的data-queryname,从而导致_queryName undefined

callback并没有调用

$.fn.cxSelect = function(settings, callback) { this.each(function(i) { $.cxSelect(this, settings, callback); }); return this; };
callback传进去没有调用

层级较多,渲染的问题

html代码:

<table>
        <div id="selectt12">
            <tr>
                <th>dd2 </th>
                <td>
                    <div class="selectContainer">
                        <div class="arrow"></div>
                        <select name="HrReport[t12]" id="t12" class="select12">
                            <option value="">--</option>
                            <option value="4077" >1</option>
                        </select>
                    </div>
                </td>
            </tr>
            <tr>
                <th>dd2.1 </th>
                <td>
                    <div class="selectContainer">
                        <div class="arrow"></div>
                        <select name="HrReport[t13]" id="t13"
                                data-url="/backend.php?r=report/report/fieldOptionTree&field_id=1582&level=2" class="select13" data-json-space="data" data-json-name="name" data-json-value="value">
                            <option value="">--</option>
                        </select>
                    </div>
                </td>
            </tr>
        </div>
    </table>

js代码:

$('#selectt12').cxSelect({
        selects: ['select12', 'select13'],
        jsonName: 'name',
        jsonValue: 'value'
    });

这样的html结构,cxSelect没有生效,请问是什么原因?理论上是在寻找 .select12 .select13 这两个class,但是实际没有渲染到,请帮忙指点,多谢

jsonSpace不生效

要按照demo里的直接返回,不包裹在data里面数据是正常的,只要包裹了,数据就出不来

$('#w1').cxSelect({ url: API_URL + 'v1/site/region-tree', selects: ['province', 'city', 'district'], // selects 为数组形式,请注意顺序 emptyStyle: 'hidden', jsonSpace: 'data', jsonName: 'region_name', jsonValue: 'region_code', jsonSub: 'children' });

麻烦看一下jsonSpace的问题,我尝试切换到jquery.cxselect.js version 1.3.11时,发现jsonSpace是生效的,但是emptyStyle又不生效了

增加 select 渲染完成的事件

首先感谢你做出这么好的插件。
提个小小的需求:在每一次 select 内容被重新渲染的时候,都产生一个事件。
例如选择省份的时候,市级select会重新渲染。这个时候市级select上整个select组会触发一个render事件。有了这个事件,就可以用select2这样的插件给select增加搜索功能。

var timer = -1;
self.dom.box.on('change', 'select', function() {
  self.selectChange(this.className);
  if (timer == -1) {
    timer = setTimeout(function() {
      self.dom.box.trigger('afterRender');
      timer = -1;
    }, 10);
  }
});

试了下,这样的代码应该就可以了。

README.md 中示例代码错误

$('#element_id').cxSelect({
url: 'cityData.min.json' // 提示:如果服务器不支持 .json 类型文件,请将文件改为 .js 文件
selects: ['province', 'city', 'area'], // selects 为数组形式,请注意顺序
emptyStyle: 'none'
});

应为:
$('#element_id').cxSelect({
url: 'cityData.min.json', // 提示:如果服务器不支持 .json 类型文件,请将文件改为 .js 文件
selects: ['province', 'city', 'area'], // selects 为数组形式,请注意顺序
emptyStyle: 'none'
});

第二行缺少 ,

optgroup

How to add option optgroup label?

github 下载的demo 直接运行index.html 报错

jquery.js:9664 XMLHttpRequest cannot load file:///C:/Users/weizong.gao/Desktop/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E…E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9/cxSelect/js/cityData.min.json. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.

如果数据放在云存储或者CDN访问就会报错

Request header field X-API-REQUEST is not allowed by Access-Control-Allow-Headers in preflight response.
采取这种 JS 里面获取 json 数据 ,是很不合理的一种方式,可以通过在数据文件里面 执行 js 然后将数据继承到现有变量,在程序中直接调用就好了

当 data-value 值为数字时,设置默认值失败!

当 _this.selectArray[n].data('value') 为数字时,下面的判断值为 false,设置默认值语句没有执行
if (_this.selectArray[n].data('value') && _this.selectArray[n].data('value').length) {
建议改成
if (String(_this.selectArray[n].data('value')) {

if (_this.selectArray[n].data('value') || _this.selectArray[n].data('value') === 0) {

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.