• jquery.tagthis和jquery.autocomplete一起实现标签


    目的

    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;
     
  • 相关阅读:
    PCI Express体系结构导读(3)- PCIE
    PCI Express体系结构导读(2)
    npm添加代理和取消代理
    流媒体压力测试rtmp&hls(含推流和拉流)
    流媒体跳坑: 03-视频会议:使用LiveRTC来做视频直播
    流媒体跳坑: 02-视频会议:Webrtc服务器
    正交调制解调(MATLAB)
    mp4文件断电保存-(关于:MP4视频文件损坏的一点想法)
    流媒体跳坑: 01-Mp4 文件解析
    centos 守护 node 进程
  • 原文地址:https://www.cnblogs.com/zeroes/p/jquery_tagthis.html
Copyright © 2020-2023  润新知