【问题标题】:Using sortable with Tag-it jqueryui通过 Tag-it jqueryui 使用可排序
【发布时间】:2013-01-11 07:29:45
【问题描述】:

我一直在使用来自 https://github.com/aehlke/tag-it(演示 - http://aehlke.github.com/tag-it/examples.html)的 tag-it 插件。

在这段代码中,有一个选项可以在另一个输入、textarea 等中显示输入的标签。第一个选项 -

        $('#singleFieldTags').tagit({
            availableTags: sampleTags,

            singleField: true,
            singleFieldNode: $('#mySingleField')
        });

这里的 id - #singleFieldTags 是输入字段,它是一个类似 <ul 的列表,而 id - #mySingleField 显示“列表排序”标签,每个标签之间都有逗号。

#singleFieldTags 中添加和删除的所有标签都出现在#mySingleField 中。由于tag-it没有内置的可排序功能,添加sortable()来改变#singleFieldTags中的标签顺序,不会改变#mySingleField中的标签顺序。

第二个选项是一个只有#singleFieldTags 的纯文本,如下所示:-

        $('#singleFieldTags').tagit({
            availableTags: sampleTags,
        });

虽然在tag-it.js中有一个,但是由于上面的标签列表放在<li></li>之间,所以在提交php表单后,该值不会出现在mysql表中。

如何使标签可排序并确保列表字段<ul 中的标签排列与在第一个选项中一样显示在<textarea 中?或者如何在单个字段<input 中对标签进行排序并使其能够通过表单提交?

编辑:这里有一个类似 Tag-it 的插件,称为 tagit:http://webspirited.com/tagit/。如果标签被交换,这个插件有一个输入框的可排序,当在表单上提交时,它会按排序顺序出现。然而,它的缺点是它有自定义的主题滚轮主题,这些主题并不相似,甚至无法链接到 jQuery UI (jqueryui.com) 上的主题。

但另一方面,tag-it 插件(不是 tagit)可以加载这些主题但不提供可排序功能。

【问题讨论】:

  • "Themeroller" (jqueryui.com/themeroller) 是 JQueryUI 的一部分。 Tag-it 插件允许加载兼容的 JQUEeryUI 主题。那么使用您发现的第二个插件有什么问题:Tag-it?您只需将您当前在站点中使用的 CSS 文件主题指定给 tag-it 插件,还是我遗漏了什么?
  • 我已经尝试link href 到这些(jqueryui.com/themeroller)主题,但它们不适用于标签 - 它作为标签 - 它在您下载时在特定文件夹中预定义了主题它,这些主题中的 css 文件与 jqueryui.com/themeroller 的 css 文件非常不同,而且它们看起来甚至不如原始的 jQuery 主题滚动器。

标签: jquery-ui list input jquery-ui-sortable


【解决方案1】:

这是一个使用 tag-it 插件的解决方案,因为我知道您的引用中解释了您缺少的功能“...添加一个 sortable() 来更改 #singleFieldTags 中标签的顺序,不会更改#mySingleField 中标签的顺序"。

为了让“#mySingleField”反映新的排序顺序,我在 sortable() 的停止事件中添加了一个处理程序:

$('#singleFieldTags').sortable({
    stop: function(event,ui) {
        $('#mySingleField').val(
            $(".tagit-label",$(this))
                .clone()
                .text(function(index,text){ return (index == 0) ? text : "," + text; })
                .text()
        );
    }
});

$('#singleFieldTags2').siblings(".tagit").sortable({
    stop: function(event,ui) {
        $('#singleFieldTags2').val(
            $(".tagit-label",$(this))
                .clone()
                .text(function(index,text){ return (index == 0) ? text : "," + text; })
                .text()
        );
        console.log( $('#singleFieldTags2').val() );        // just for reference
    }
});

这是jsfiddle that demonstrates the functionality (为单个输入字段添加了功能)

【讨论】:

  • 是的,这很好用,是否也可以只为一个输入字段提供此功能?我相信现在您已经解决了 2 个字段的标签排序问题,因为感觉插件不完整或仅偏向于 2 个字段假设如果在任何时候,我想切换到普通输入,发现这些标签没有排序。
  • @Javier,是的,这很简单,我已将普通输入字段的排序添加到 jsfiddle。
  • 太棒了!感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2012-10-27
  • 2010-11-13
  • 1970-01-01
  • 1970-01-01
  • 2017-11-15
  • 1970-01-01
  • 2013-05-26
  • 1970-01-01
相关资源
最近更新 更多