Tag-it onlyAvalaibleTags选项不起作用

时间:2011-12-06 07:00:26

标签: jquery asp.net-mvc-3 tag-it

我使用来自https://github.com/aehlke/tag-it/downloads的tag-it插件。如何禁用添加新标签?

$(document).ready(function () {
                $("#Tags").tagit({
                    singleField: true,
                    singleFieldNode: $('#mySingleField'),
                     //  onlyAvailableTags : true,
                     allowNewTags: false,
                    tagSource: [@Html.Raw(ViewBag.AvailableTags)]
                });
            });

我尝试使用onlyAvailableTags : trueallowNewTags: false选项,但没有效果。

3 个答案:

答案 0 :(得分:1)

我通过评论发现:

 // Autocomplete will create its own tag from a selection and close automatically.
 if (!that.tagInput.data('autocomplete-open')) {
    that.createTag(that._cleanedInput());
 }

// Create a tag when the element loses focus.
// If autocomplete is enabled and suggestion was clicked, don't add it.
if (!that.tagInput.data('autocomplete-open')) {
     that.createTag(that._cleanedInput());
}

它删除了此功能。也许不是最干净的方式,但它确实有效。

只需注释掉if(){ }循环。

答案 1 :(得分:1)

这是我为tag-it的最新版本所做的:

var tags_list = ['tag1', 'tag2, 'tag3];

$("input[name='subject-tags']").tagit({
    availableTags : tags_list,
    beforeTagAdded : function(event, ui) {
        if(tags_list.indexOf(ui.tagLabel) == -1){
            return false;
        }
    }
});

试图通过实施

使其更清洁
$("input[name='subject-tags']").tagit({
    availableTags : ['tag1', 'tag2, 'tag3],
    beforeTagAdded : function(event, ui) {
        if(this.availableTags.indexOf(ui.tagLabel) == -1){
            return false;
        }
    }
});

this.availableTags不返回数组(返回:undefined)。我是一个JS菜鸟,所以我访问该属性的方式肯定是错的。

答案 2 :(得分:0)

既然你说“但没有效果”,我猜想@Html.Raw(ViewBag.AvailableTags)产生的输出打破了javascript语法。标签需要在引号中,否则它们将被视为变量。

不正确的输出:

tagSource: [my-tag, another-tag]

服务器端,我假设您有某种IEnumerable<string>

ViewBag.AvailableTags = new List<string>
{
    "my-tag",
    "another-tag",
};

然后,在.cshtml

tagSource: ["@string.Join("\", \"", ViewBag.AvailableTags)"]

这将产生正确的输出:

tagSource: ["my-tag", "another-tag"]

这将是我首先尝试的。