(function(){
//select操作
$.fn.loadSelect = function(opt){
opt = $.extend({}, {
required:false,//为真则添加<option value="" selected="selected">required值</option>
nodata:null,//子级无数据时 select 的状态。可设置为:"none"(display隐藏) | "hidden"(visibility隐藏) | 无
data:[],
loadCall:function(){}
}, opt);
var d = {}, callback = function(data, s){
var html = '';
$.each(data||[], function(i,n){
d = n.id ? n : {
id:i,
text:n
};
html += '<option value="'+d.id+'"'+((opt.def != undefined && (opt.def == d.id || opt.def == d.text)) ? ' selected="selected"' : '')+'>'+d.text+'</option>';
});
s.html(r+html);
(r || html) && s.trigger('change');
switch(opt.nodata){
case 'none':
html === '' ? s.hide() : s.show();
break;
case 'hidden':
s.css('visibility', html === '' ? 'hidden' : 'visible');
break;
}
$.isFunction(opt.loadCall) && opt.loadCall.call(s);
}, r = opt.required ? '<option value="">'+($.type(opt.required) == 'string' ? opt.required : '-请选择-')+'</option>' : '';
return this.each(function(){
var s = $(this);
if(s.is('select')){
if(typeof(opt.data) === 'string'){
s.empty();
$.getJSON(opt.data, function(json){
callback(json, s);
});
}else{
callback(opt.data, s);
}
}
});
},
//select联动
$.fn.linkage = function(opt){
opt = $.extend({}, {
build:true,//自动创建不存在的?
selects:['#city', '#area'],//子集select,按顺序,jquery选择器(.#)
seldef:[],//默认值,1以后和上项对应,可是id或者text
required:true,
nodata:'',
url:'/company/getCity.html?id={$id}',//子数据,string,{$id} or {$text}页码信息
data:[],//父级的数据
def:0//父级默认值
}, opt);
var mkSelect = function(i){
var n = child[i], nN = $(n);
if( i && n && opt.build && nN.length === 0 ){
var sn = n.substr(1), ci = n.substr(0, 1) == '#' ? 'id="'+sn+'"' : 'class="'+sn+'"';
nN = $(child[i-1]).after('<select name="'+sn+'" '+ci+'></select>').next();
} !nN.data('linkage') && nN.change(function(){
mkSelect(i+1).loadSelect({
data: this.value ? opt.url.sprintf({
id: this.value,
text: this.selectedIndex >= 0 ? this.options[this.selectedIndex].text : ''
}) : [],
nodata:opt.nodata,
required:opt.required,
def:opt.seldef[i]||''
});
}).data('linkage', true); return nN;
}, child = opt.selects||[];
child.unshift(this);
var s = mkSelect(0);
opt.data.length && s.loadSelect({
data:opt.data,
def:opt.def
});
return this;
},
//jquery.printf
String.prototype.sprintf = function(data, def) {
return this.replace(/(?:\{\$)([\w\d\-\_]+)(?:\})/g, function() {
return data[arguments[1]]||def||'';
});
}
});

示例:

 <div class="jumbotron">
<h1>联动测试</h1>
<select name="" id="addr_prv"></select>
</div>
<script type="text/javascript">
In.ready(function(){
$('#addr_prv').linkage({data:'/company/getCity.html',seldef:[37,567]});
});
</script>

jquery select操作和联动操作的更多相关文章

  1. jquery select取值,赋值操作

    select">jquery select取值,赋值操作 一.获取Select 获取select 选中的 text : $("#ddlRegType").find( ...

  2. jQuery select的操作代码

    jQuery對select的操作的实际应用代码. //改變時的事件  复制代码代码如下: $("#testSelect").change(function(){ //事件發生  j ...

  3. JS对select动态添加option操作 (三级联动) (搜索拼接)

    以下纯属自我理解之下再东搜西查的内容~ JS对select动态添加option操作有个高大上的艺名叫多级联动:第一级改变时,第二级跟着变,第二级改变时,第三级跟着变... 本菜鸟是在工作中遇到做收货地 ...

  4. jQuery select的操作实现代码

          //改变时的事件  $("#testSelect").change(function(){ //事件发生生 jQuery('option:selected', this ...

  5. Jquery的事件操作和文档操作

    对于熟悉前端开发的小伙伴,相信对于Jquery一定不陌生,相对于JavaScript的繁琐,Jquery更加的简洁,当然简洁不意味着简单,我们可以使用Jquery完成我们想要实现全部功能,这里为小白们 ...

  6. jQuery基础知识点(DOM操作)

    1.样式属性操作     1)设置样式属性操作         ①设置单个样式: // 第一个参数表示:样式属性名称 // 第二个参数表示:样式属性值 $(selector).css(“color”, ...

  7. jquery系列教程4-事件操作全解

    点击打开: jquery系列教程1-选择器全解 jquery系列教程2-style样式操作全解 jquery系列教程3-DOM操作全解 jquery系列教程4-事件操作全解 jquery系列教程5-动 ...

  8. jQuery 选择器 筛选器 样式操作 文本操作 属性操作 文档处理 事件 动画效果 插件 each、data、Ajax

    jQuery jQuery介绍 1.jQuery是一个轻量级的.兼容多浏览器的JavaScript库. 2.jQuery使用户能够更方便地处理HTML Document.Events.实现动画效果.方 ...

  9. jquery实现点击展开列表同时隐藏其他列表 js 对象操作 对象原型操作 把一个对象A赋值给另一个对象B 并且对象B 修改 不会影响 A对象

    这篇文章主要介绍了jquery实现点击展开列表同时隐藏其他列表的方法,涉及jquery鼠标事件及节点的遍历与属性操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了jquery实现点击 ...

随机推荐

  1. .NET中class和struct的区别

    1.引言 提起class和struct,我们首先的感觉是语法几乎相同,待遇却天壤之别.历史将接力棒由面向过程编程传到面向对象编程,class和struct也背负着各自的命运前行.在我认为,struct ...

  2. always语言指导原则

    1.每个always只有一个@(event-expression). 2.always块可以表示时序逻辑和组合逻辑. 3.带有posedge和negedge关键字的是表示沿触发的时序逻辑,没有的表示组 ...

  3. Learn know more about big data

    As we all know,we are in a big data age now."Every sword has two slides",as a ITer,we shou ...

  4. WinForm程序界面假死,寻求完美解决方案

    故事的开端是这样的,小白是一个程序员,他确实也是一个小白,目前还在程序员发展的道路上,兢兢业业的小心求学. 有一天,小白接到一个任务,完成一个Winform程序,附加一个功能就是可以读IC卡. 小白终 ...

  5. C# 该行已经属于另一个表 的解决方法[转]

    该文转自:http://blog.sina.com.cn/s/blog_48e4c3fe0100nzs6.html DataTable dt = new DataTable(); dt = ds.Ta ...

  6. google chrome 32 升级变更找回user agent(google chrome lose user agent)

    chrome32中user agent 找不着了?没关系,看我画的图吧.为什么是英文的,国际化嘛...

  7. 【转载】Ext中关于Ext.QuickTips.init()的使用

    免责声明:     本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除.     原文作者:然嗄      原文地址:http://www.cnblogs.com/jia ...

  8. 【POJ】【3537】Crosses and Crosses

    博弈论 相当于放了x的位置,左右4格都不能再放x了,谁无处可放就输. n<=2000 直接枚举后继状态,暴力求SG函数即可. 例: 0000000->x..0000 / .x..000 / ...

  9. PhotoshopCS4轻松将PSD分层导出为Png分层

    大家在网上都下载过PSD分层素材,有时候想把素材分层导出,以往做法是一层一层导出,可是这样效率太低,其实利用PS自带功能可以轻松导出PNG分层.     我们先打开一个PSD文件. 文件有7个图层,分 ...

  10. linux配置mysql,tomcat命令vi

    [root@yangchehome bin]# ./mysqld_safe -user=mysql & [1] 17135 [root@yangchehome bin]# 140316 16: ...