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") 是什么/在哪里?我需要单独创建吗? 想通了,要添加到 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") 是什么/在哪里?我需要单独创建吗? 想通了,在.php文件中,在while条件之前,可以这样使用:
array_push($yourarray, array('id'=> 0 ,'name'=> $_GET["term"]));
【讨论】:
以上是关于jQuery Tokeninput 如果不存在则添加的主要内容,如果未能解决你的问题,请参考以下文章