jquery.tagthis和jquery.autocomplete一起实现标签
2016-05-31 17:05
507 查看
目的
jquery.tagthis:使用tagthis控件实现标签的输入提醒功能,每个标签具有id和text两个属性。
实现
1.定义Html输入标签<inputname="jobTag"id="jobTag"/>
2.初始化标签
$(function(){ $('#jobTag').tagThis({noDuplicates:true,defaultText:'输入标签',autocompleteSource:[],callbacks:{beforeAddTag:beforeAddTag}}); vartagList=@Html.Raw(Model.Tags); $(tagList).each(function(index,element){ $('#jobTag').addTag(element); }); //或者写成
vartagList='@Html.Raw(Model.Tags)';
$(JSON.parse(tagList)).each(function(index,element){
$('#jobTag').addTag(element);});
});
noDuplicates:标签不能重复 defaultText:默认是typetotag,这里可以自定义 callbacks:有beforeAddTag、afterAddTag、afterRemoveTag、onChange、beforeRemoveTag、errors,这里本来想在beforeAddTag事件中修改标签的id值,后来发现修改不了 Model.Tags:是在后台获取的一个json格式的字符串,如:vartagList='[{"id":62,"text":"java"},{"id":70,"text":"ORACLE"}]';
3.动态修改下拉的数据源和已经添加的标签
$.ajax({
url:'url',
type:'get',
data:{jobTitle:jobTitle,jobDetail:jobDetail},
success:function(response){
if(response.Success){
//更新自动提示的数据源
$('#jobTag--tag').autocomplete("option","source",response.Result.AllTag);
$('#jobTag').clearAllTags();
$(response.Result.MatchingTag).each(function(index,element){
$('#jobTag').addTag(element);});
}else{
}
},
error:function(XMLHttpRequest,textStatus,errorThrown){
show_v_msg(XMLHttpRequest.readyState+XMLHttpRequest.status+XMLHttpRequest.responseText,'error');
}});
#jobTag--tag是从tagthis的源码中分析到,真正的输入框是原有的id+“--tag”。 $('#jobTag--tag').autocomplete("option","source",response.Result.AllTag);修改自动提示框的数据源。 response.Result.AllTag是[{value:62,label:"java"},{value:63,label:"jsp"}]这样的,要符合autocomplete控件的格式 response.Result.MatchingTag是[{id:62,text:"java"},{id:70,text:"ORACLE"}这样的,要符合tagthis标签的格式。
4.修改tagthis的源码,让他支持自定义格式的autocomplete 修改自动完成控件的显示和选中时的数据格式。
//autocompletefunctionality if(settings.autocompleteSource){ varautocompleteSettings={ source:settings.autocompleteSource, //zbladd focus:function(event,ui){ realInputElement.val(ui.item.label); returnfalse; }, select:function(event,ui){ event.preventDefault(); //realInputElement.addTag(ui.item.value); //zbledit vartagData={ text:ui.item.label, id:ui.item.value }; realInputElement.addTag(tagData); fakeInputElement.focus(); returnfalse; } };
这里是判断标签是否已经存在,感觉if(settings.interactive||!data.id)这里原来就是错的。
$.fn.tagExists=function(settings,data){ //checktoseeifourtagalreadyexistsontheinput vartags=$(this).data('tags'); //ifnothingcomesbackfrom.data(),there'snotags,soreturnfalse if(!tags){ returnfalse; } //ifit'saninteractiveinput,datacomesbackasastring,sojustcheckthedatavariableitself //zbledit //if(settings.interactive||!data.id){改成if(settings.interactive&&!data.id){ if(settings.interactive&&!data.id){
标签除了可以从下拉框中选择预定义的标签还可以输入自定义标签,默认产生自定义标签的id是从0到7000,这里修改一下从2000开始,便于后台区分哪些是自定义的标签。
$.fn.tagThis.generateUniqueTagId=function(tags){ varmin=2000;//zbledit varmax=7000;
相关文章推荐
- jQuery插件写法
- jquery 在 table 中修改某行值
- jQuery-DOM
- jquery获取easyui日期控件的值
- Jquery自定义插件
- jQuery scroll事件实现监控滚动条分页示例
- jquery validation对隐藏的元素不进行验证
- jquery width(), innerWidth(), outerWidth() 区别
- 基于jQuery实现点击列表加载更多效果
- Jquery 常用函数学习记录
- jQuery表格排序(tablesorter)
- jquery 遍历form 表单
- jQuery效果
- jquery的each()详细介绍 -
- Jquery 插件学习笔记
- Jquery EasyUI后台实例 - undefined? - 博客园
- jQuery MiniUI - 快速开发WebUI
- Live Demo - jQuery EasyUI
- 如何自己开发一款js或者jquery插件
- JQuery中的动画整理