jQuery Tokeninput 如果不存在则添加

Posted

技术标签:

【中文标题】jQuery Tokeninput 如果不存在则添加【英文标题】:jQuery Tokeninput add if not exists 【发布时间】:2011-11-24 06:37:54 【问题描述】:

我正在编写基于用户输入的脚本,

我有一些字段需要从数据库中查询其值,

如果没有找到条目,我想添加一个新值,以便下一个用户通过自动完成找到它。

我发现这个名为 TokenInput 的漂亮且易于实现的 jquery 插件,但它似乎没有

接受在我的数据库查询中不可用的条目。

这是插件的链接:http://loopj.com/jquery-tokeninput/demo.html

有解决办法吗?或者您是否建议另一个已经具有此功能的插件。

而且我有点担心这类网站的安全方面,在执行这类实施时我需要注意什么特别的事情吗?

【问题讨论】:

这个解决方案对我有用。我相信这会有所帮助。 [1]:***.com/a/22327593/2269004 【参考方案1】:

这个问题现在在这个插件的最新主控中处理,使用 allowFreeTagging 选项:https://github.com/loopj/jquery-tokeninput/blob/master/src/jquery.tokeninput.js#L57

2年没有更新版本号和文档,所以你必须使用master。

【讨论】:

【参考方案2】:

在字段上启用 tokenInput 时,

$(selector).tokenInput(url, ...

该 url 是 tokenInput 发送搜索查询的地方。它指向一个脚本,该脚本根据与搜索查询匹配的数据库条目返回建议。当您的数据库中没有任何内容与搜索查询匹配时,您想要让该脚本在该案例的列表中添加另一个建议。如何做到这一点很大程度上取决于脚本。

因为您用php 标记了您的问题,所以我猜该网址指向一个php 脚本,该脚本返回一个包含建议的JSON 对象。在这种情况下,修改 php 脚本,以便将 new 建议添加到列表中:

"id: " . $idForThisNewSuggestion . ", name: \"" . $searchQueryString . " (new suggestion)\""

【讨论】:

很好的解决方案。如果没有找到结果,您也可以只显示搜索词以使其更整洁【参考方案3】:

这是我使用本地 json 的解决方案

$("#input").tokenInput(yourjsondata,
    preventDuplicates: false,
    onResult: function (item) 
        if($.isEmptyObject(item))
              return [id:'0',name: $("tester").text()]
        else
              return item
        

    ,
);

id:0 的所有内容都是新条目

【讨论】:

$("tester") 是什么/在哪里?我需要单独创建吗? 想通了, 是一个标记 tokeninput 添加 DOM 来保存您当前在输入框中输入的文本。 优秀的解决方案+1【参考方案4】:

要添加到 Shawn 的答案(即,您需要在服务器端将其作为新项目实际添加到数据库中),您可以设置 this change 以允许在 javascript 方面进行添加。

【讨论】:

【参考方案5】:

我还更改了 onBlur 功能,如果他们点击搜索框,则选择第一项 - 这对用户来说更直观:

.blur(function () 
        $(this).val("");
        if ($(".token-input-selected-dropdown-item").length>0)
            add_token($(".token-input-selected-dropdown-item").data("tokeninput"));
        hide_dropdown();
    )

【讨论】:

【参考方案6】:
 $(document).ready(function() 
            $("#expert").tokenInput("source.php", 
                theme: "facebook",
                noResultsText:'Skill Not Found - Enter to Add',
                queryParam:'q',
                onResult: function (item) 
                                            if($.isEmptyObject(item))
                                                  return [id:$("#token-input-expert").val(),name: $("#token-input-expert").val()+'*']
                                            else
                                                  return item
                                            
                ,
                preventDuplicates:true<?php if($expert_rank_json)?>,
                prePopulate: <?php echo $expert_rank_json ?>
                <?php  ?>
            );

【讨论】:

【参考方案7】:

我在 SteveR 的回答中添加了一些功能,因为即使有结果,我也希望该值出现在下拉列表的顶部。如果我要添加的数据库中不存在所选项目,也可以添加:

 $("#my_input").tokenInput(my_results_route), 
    hintText: "Select labels",
    noResultsText: "No results",
    searchingText: "Searching...",
    preventDuplicates: true,
    onResult: function(item) 
        if($.isEmptyObject(item))
            return [id:'0', name: $("tester").text()];   
         else 
            //add the item at the top of the dropdown
            item.unshift(id:'0', name: $("tester").text());
            return item; 
        
    ,
    onAdd: function(item) 
        //add the new label into the database
        if(!parseInt(item.id)) 
            //database insertion ajax call
            console.log('Add to database');
        
    
);

【讨论】:

$("tester") 是什么/在哪里?我需要单独创建吗? 想通了, 是一个标记 tokeninput 添加 DOM 来保存您当前在输入框中输入的文本。【参考方案8】:

在.php文件中,在while条件之前,可以这样使用:

array_push($yourarray, array('id'=> 0 ,'name'=> $_GET["term"])); 

【讨论】:

以上是关于jQuery Tokeninput 如果不存在则添加的主要内容,如果未能解决你的问题,请参考以下文章

jQuery Tokeninput:只读不工作

Jquery TokenInput 初始字符串搜索

jquery tokeninput 在编辑时不显示 h:inputtext 上的数据

如何向 jQuery Tokeninput 添加占位符?

jQuery-tokeninput 失败:“术语”未定义?

rails jquery tokeninput 返回“不是函数”