本文实例讲述了jQuery插件扩展的方法。分享给大家供大家参考,具体如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <script language= "javascript" type= "text/javascript" >
function doSomething(callback) {
callback('stuff', 'goes', 'here');
}
function foo1(a, b, c) {
alert(a + " " + b + " " + c);
}
doSomething(foo1);
var foo2 = function (a,b,c) {
alert(a + " " + b + " " + c);
}
doSomething(foo2);
doSomething( function (a,b,c){
alert(a + " " + b + " " + c);
});
</script>
|
Copy after login
callback这个参数必须是函数才有效。才能起到回调的作用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <script language= "javascript" type= "text/javascript" >
function doSomething(callback) {
if (typeof callback === ' function '){
callback('stuff', 'goes', 'here');
} else {
alert('jb51.net');
}
}
function foo1(a, b, c) {
alert(a + " " + b + " " + c);
}
doSomething(foo1);
var foo2 = function (a,b,c) {
alert(a + " " + b + " " + c);
}
doSomething(foo2);
doSomething( function (a,b,c){
alert(a + " " + b + " " + c);
});
var foo3 = 'a';
doSomething(foo3);
</script>
|
Copy after login
foo3不是函数的时候,弹出jb51.net
jQuery实例
原函数
1 | $.fn.citySelect= function (settings)
|
Copy after login
添加回调
1 | $.fn.citySelect= function (settings, changeHandle)
|
Copy after login
给回调函数赋值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | var selectChange = function (areaType) {
if (typeof changeHandle === ' function '){
var prov_id = prov_obj.get(0).selectedIndex;
var city_id = city_obj.get(0).selectedIndex;
var dist_id = dist_obj.get(0).selectedIndex;
if (!settings.required){
prov_id--;
city_id--;
dist_id--;
};
if (dist_id<0){
var data = {
prov: city_json.citylist[prov_id].p,
city: city_json.citylist[prov_id].c[city_id].n,
dist: null
};
} else {
var data = {
prov: city_json.citylist[prov_id].p,
city: city_json.citylist[prov_id].c[city_id].n,
dist: city_json.citylist[prov_id].c[city_id].a[dist_id].s
};
}
changeHandle(data, areaType);
}
};
|
Copy after login
获取省市县数据data以及触发的change事件类型areaType
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | prov_obj.bind( "change" , function (){
cityStart();
selectChange('prov');
});
city_obj.bind( "change" , function (){
distStart();
selectChange('city');
});
dist_obj.bind( "change" , function (){
selectChange('dist');
});
|
Copy after login
在各个事件中执行
前端使用
1 2 3 4 5 6 7 8 9 | $( "#s_city" ).citySelect({
prov: "江苏省" ,
city: "宿迁市" ,
dist: "宿城区" ,
nodata: "none"
},
function (data, type) {
selectAgent(data.city, data.dist);
});
|
Copy after login
使用回调回来的data数据,用于selectAgent函数中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | function selectAgent(city,district){
$.ajax({
type: "POST" ,
url: "{sh::U('Index/ajax',array('todo'=>'getagent'))}" ,
data: "city=" +city+ "&district=" +district,
success: function (json){
json = JSON.parse(json);
opt_str = "<option value=''>-请选择-</option>"
if (json.status == 1){
$.each(json.data, function (index,con){
opt_str += "<option value=" +con.id+ ">" +con.name+ " 电话:" +con.tel+ "</option>"
})
}
$('#agent_id').html(opt_str);
}
});
}
|
Copy after login
去ajax获取相应的代理商数据。
改造插件完成。