首先在这个例子中看到这个例子http://jsfiddle.net/Es5qs/通过将空格保持为分隔符我创建标签,但我想要的是当我在textbox1上键入内容时它应该反映为textbox2中的标签听到的是我的代码,我怎么能做这个。
<!DOCTYPE html>
<html>
<head>
<script src="jquery.min.js"></script>
<script src="jquery-ui.js"></script>
<script>
$(document).ready(function() {
$("#textBox").keyup(function() {
$("#message").val(this.value);
});
});
$(document).ready(function() {
//The demo tag array
var availableTags = [
{value: 1, label: 'tag1'},
{value: 2, label: 'tag2'},
{value: 3, label: 'tag3'}];
//The text input
var input = $("input#text");
//The tagit list
var instance = $("<ul class=\"tags\"></ul>");
//Store the current tags
//Note: the tags here can be split by any of the trigger keys
// as tagit will split on the trigger keys anything passed
var currentTags = input.val();
//Hide the input and append tagit to the dom
input.hide().after(instance);
//Initialize tagit
instance.tagit({
tagSource:availableTags,
tagsChanged:function () {
//Get the tags
var tags = instance.tagit('tags');
var tagString = [];
//Pull out only value
for (var i in tags){
tagString.push(tags[i].value);
}
//Put the tags into the input, joint by a ','
input.val(tagString.join(','));
}
});
//Add pre-loaded tags to tagit
instance.tagit('add', currentTags);
});
</script>
</head>
<body>
<div>
TextBox 1 : <input type="textbox" id="textBox"></input>
TextBox 2 : <input type="text" id="message" name="tags"/></input>
</div>
</body>
</html>
答案 0 :(得分:1)
<强> demo in jsfiddle 即可。主要思想是每次查看整个字符串,然后简单地重新创建所有元素。这样可以避免重复检查等等。只要您不想处理大量文本,性能就无所谓。
我与keypress
交换keydown
以捕获退格。此外,它在每个键上执行,而不是仅在空间上执行。在keydown监听器内部:
tags = this.value.split(/\s+/);
$(".target").html(""); //clear
$.each(tags, function (ind, tag) {
$(".target").append("<a href='#' class='tag'>" + tag + "</a>");
});
首先,第一个文本框中的输入在空格上分割。正则表达式也匹配连续的空格。这种方式human being
仍然只创建两个标记。接下来,清除目标以前的标记。最后,我们迭代所有可用的标签并为它们创建链接元素。
注意:我没有改变你创建这些标签的方式。我强烈建议切换到类似$(".target").append($("<a href='#' class='tag'>").text(tag));
的内容。这会转义输入,因此用户无法通过包含HTML标记来破坏网站。例如,尝试将<b>
输入到jsfiddle演示中会发生什么。