目的

jquery.tagthis:http://www.dangribbin.co/jquery-tag-this/demo/

使用tagthis控件实现标签的输入提醒功能,每个标签具有id和text两个属性。

实现

1.定义Html输入标签

<input name="jobTag" id="jobTag" />

2.初始化标签

 $(function () {

        $('#jobTag').tagThis({ noDuplicates: true, defaultText: '输入标签', autocompleteSource: [], callbacks: { beforeAddTag: beforeAddTag } });
var tagList = @Html.Raw(Model.Tags);
$(tagList).each(function (index, element) {
$('#jobTag').addTag(element);
});
    
//或者写成

var tagList = '@Html.Raw(Model.Tags)';
$(JSON.parse(tagList)).each(function (index, element) {
$('#jobTag').addTag(element);
});

    });
noDuplicates:标签不能重复
defaultText:默认是type to tag,这里可以自定义
callbacks:有beforeAddTag、afterAddTag、afterRemoveTag、onChange、beforeRemoveTag、errors,这里本来想在beforeAddTag事件中修改标签的id值,后来发现修改不了
Model.Tags:是在后台获取的一个json格式的字符串,如:var tagList = '[{"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

修改自动完成控件的显示和选中时的数据格式。
  //autocomplete functionality

                if (settings.autocompleteSource) {

                    var autocompleteSettings = {
source: settings.autocompleteSource,
//zbl add
focus: function (event, ui) {
realInputElement.val(ui.item.label);
return false;
},
select: function( event, ui ) {
event.preventDefault();
//realInputElement.addTag(ui.item.value);
//zbl edit
var tagData = {
text: ui.item.label,
id: ui.item.value
};
realInputElement.addTag(tagData);
fakeInputElement.focus();
return false;
}
};

这里是判断标签是否已经存在,感觉 if(settings.interactive || !data.id) 这里原来就是错的。

    $.fn.tagExists = function(settings, data) {

        //check to see if our tag already exists on the input
var tags = $(this).data('tags'); //if nothing comes back from .data(), there's no tags, so return false
if (!tags){
return false;
} //if it's an interactive input, data comes back as a string, so just check the data variable itself
//zbl edit
// if(settings.interactive || !data.id){ 改成 if(settings.interactive && !data.id){
if(settings.interactive && !data.id){

标签除了可以从下拉框中选择预定义的标签还可以输入自定义标签,默认产生自定义标签的id是从0到7000,这里修改一下从2000开始,便于后台区分哪些是自定义的标签。

    $.fn.tagThis.generateUniqueTagId = function(tags) {
var min = 2000; //zbl edit
var max = 7000;
 

jquery.tagthis和jquery.autocomplete一起实现标签的更多相关文章

  1. JQuery 插件之Ajax Autocomplete(ajax自动完成)搜索引擎自动显示下拉框

    平时用百度,谷歌搜索的时候 会有一个下 拉列表进行提示 这是一个非常好的功能 本文要介绍的这个JQuery 插件 名叫Ajax Autocomplete 顾名思义 ajax 也就是用ajax的方式获取 ...

  2. JQuery 插件之Ajax Autocomplete(ajax自动完成)

    平时用百度,谷歌搜索的时候 会有一个下 拉列表进行提示 这是一个非常好的功能 本文要介绍的这个JQuery 插件 名叫Ajax Autocomplete 顾名思义 ajax 也就是用ajax的方式获取 ...

  3. jquery实现同时展示多个tab标签+左右箭头实现来回滚动(美化版增加删除按钮)

    闲聊 前段时间小颖分享了:jquery实现同时展示多个tab标签+左右箭头实现来回滚动文章,引入项目后,我们的组长说样子太丑了,小颖觉得还好啊,要不大家评评理,看下丑不丑?无图无真相,来上图: 看吧其 ...

  4. jquery实现同时展示多个tab标签+左右箭头实现来回滚动

    内容: jquery实现同时展示多张图片+定时向左单张滚动+前后箭头插件 jquery实现同时展示多个tab标签+左右箭头实现来回滚动 小颖最近的项目要实现类似如下效果: 蓝色框圈起来的分别是向上翻. ...

  5. jQuery创建、删除和修改html标签

    1.在父标签内创建子标签,新创建的子标签放在父标签最下面 $(parent).append(son).$(son).appendTo(parent) <div class="d&quo ...

  6. 使用jQuery筛选排除元素以修改指定标签的属性

    简单案例: $(function(){ $("td[id][id!='']").click(function(){ //你的逻辑 }); }); 上述代码,有id且id不为空的td ...

  7. 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式

    本系列文章导航 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式 一.摘要 本篇文章讲解如何使用jQuery获取和操作元素的属性和CSS样式. 其中DOM属性和元素属性的区分值得 ...

  8. jQuery学习-什么是jquery? Js与jquery之间的关系 Jquery选择器

    1.  什么是jQuery以及学习的意义等 jQuery是一个js库 JS库是什么? 把常用的方法,进行封装,封装到一个单独的js文件当中,要用的时候直接调用. 学习jQuery主要学什么? 学习jQ ...

  9. 第四十四课:jQuery UI和jQuery easy UI

    jQuery UI是jQuery官方提供的功能效果和UI样式.作为官方出的东西,它一直没有被人们看重,一是它没有datagrid,tree等UI库必备的东西,二是它修改太过频繁,体积庞大.其实它所有以 ...

随机推荐

  1. Java基础之网络编程

    网络编程:1.网络编程概述 (1)网络模型 OSI参考模型 TCP/IP参考模型 (2)网络通讯要素 IP地址 端口号 传输协议 (3)网络通讯前提: **找到对方IP **数据要发送到指定端口.为了 ...

  2. Java-类与类之间的关系

    类与类之间的几种关系   一.继承关系      继承指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力.在Java中继承关系通过关键字exte ...

  3. EF架构~为分组添加位运算聚合方法

    回到目录 我们知道在Linq里的分组groupby可以对集合中一个或者多个字段进行分组,并对其中一个属性进行聚合,而Linq为我们提供了多种聚合方法,由aver,sum,count等,而在大叔权限体系 ...

  4. OutputCache属性详解(一)一Duration、VaryByParam

    目录 OutputCache概念学习 OutputCache属性详解(一) OutputCache属性详解(二) OutputCache属性详解(三) OutputCache属性详解(四)— SqlD ...

  5. iOS-性能优化4

    UITableView性能优化技巧 Table view需要有很好的滚动性能,不然用户会在滚动过程中发现动画的瑕疵. 为了保证table view平滑滚动,确保你采取了以下的措施: 正确使用`reus ...

  6. SQL Pass北京举办1周年活动(本次活动特别邀请到了来自微软的SQL Server大师何雷谈数据库职业规划)

    地点:北京微软(中国)有限公司[望京利星行],三层308室 时间:2013年 12 月28日 13:30-16:30 SQL PASS 北京QQ群号:2435349 新浪微群地址:http://q.w ...

  7. 深入理解PHP内核(十四)类的成员变量及方法

    原文链接:http://www.orlion.ga/1237/ 类的成员变量在PHP中本质是一个变量,只是这些变量都归属于某个类,并且给这些变量是有访问控制的. 类的成员方法在PHP中本质是一个函数, ...

  8. 《BI那点儿事》数据挖掘初探

    什么是数据挖掘? 数据挖掘(Data Mining),又称信息发掘(Knowledge Discovery),是用自动或半自动化的方法在数据中找到潜在的,有价值的信息和规则. 数据挖掘技术来源于数据库 ...

  9. Hadoop官方文档翻译——HDFS Architecture 2.7.3

    HDFS Architecture HDFS Architecture(HDFS 架构) Introduction(简介) Assumptions and Goals(假设和目标) Hardware ...

  10. Java:那些把自己陷进去的误区(一)

    那些把自己陷进去的误区 1.1数据类型   1.整型: 1.在Java中,整形的范围为-2147 483 648—2147483647,并且这个范围与运行Java代码的机器无关,此举大大解决了移植问题 ...