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

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

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

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

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

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

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

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

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

【问题讨论】:

标签: php jquery jquery-tokeninput


【解决方案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"])); 
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-08-02
            • 2018-02-02
            • 2019-03-12
            • 2017-06-21
            • 2014-05-17
            • 2010-11-18
            相关资源
            最近更新 更多