Javascript 从输入字段添加和删除数据
我有一张这样的表格:Javascript 从输入字段添加和删除数据,javascript,php,jquery,html,Javascript,Php,Jquery,Html,我有一张这样的表格: <form role="form" method="POST"> <div class="form-group"> <div class="form-group input-group"> <span class="input-group-addon"> Description </span> <input class="form-contro
<form role="form" method="POST">
<div class="form-group">
<div class="form-group input-group">
<span class="input-group-addon">
Description
</span>
<input class="form-control" type="text" name="descr" maxlength="32" placeholder="Optional" >
</div>
</div>
<button type="submit" class="btn btn-success" name="name_new">
Add
</button>
</form>
描述
添加
我想在下面添加一个按钮/单词列表(例如:汽车、食物、电池、房子),当用户单击该单词时,它会被添加到名为“descr”的输入字段中。如果他再次单击该单词,则该单词将从输入字段中删除
例:我点击车、食物、房子,输入内容包括:“车、食物、房子”。
我再次点击食物,输入包含“车,房子”
此外,如果在我单击pe word/按钮后,它被转发到列表的开头(例如
汽车,食物,电池,垄断,金钱,卡片,处女座,网站
如果单击“卡片”,列表将变为:
卡片,汽车,食物,电池,垄断,金钱,处女座,网站
如果您对如何使用JQuery/Json/javascript实现这一点有任何建议,请给我一个提示/示例
谢谢。这段代码经过测试,可以正常工作
问题:当文本输入中有卡片,并且添加了car时,car会出现在单词cards中,而不是添加car,cards会丢失前3个字符,只剩下ds。
上述问题因逗号要求而变得更加棘手。添加的单词将以
,
(逗号空格)开头。如果添加的单词是第一个单词,那么它看起来像
,word
修复方法:
为了去掉前面的逗号,我使用了t.replace(/^,/,“”);
将行(^)开头的逗号替换为“”空白。要仅获取整个单词而不获取另一个单词中的单词(卡片中的car),必须在删除中包含单词的边界。单词前面带有空格或输入的开头。JavaScript中的正则表达式为“(|^)”(空格或输入的开头)
单词尾部边界是逗号或输入的结尾。正则表达式是(,|$)
然后,在执行快速添加和删除操作后,会发生一些无法解释的事情,因此我添加了一对表达式来删除它们:,,并在输入的末尾添加了一个挂起的逗号。
echo <<<EOT
<!DOCTYPE html>
<html>
<head><title>Text</title>
<form role="form" method="POST">
<div class="form-group">
<div class="form-group input-group">
<span class="input-group-addon">Description</span>
<input id="txt" class="form-control" type="text" name="descr" maxlength="32" placeholder="Optional" >
</div></div>
</form>
<button onclick="show('car')">car</button><button onclick="show('food')"> food</button><button onclick="show('battery')"> battery</button><button onclick="show('monopoly')">monopoly</button><button onclick="show('money')">money</button><button onclick="show('cards')"> cards</button><button onclick="show('virgo')"> virgo</button>
<script type="text/javascript">
//<![CDATA[
var txt = document.getElementById('txt');
function show(word){
var re = new RegExp("( |^)" + word + "($|,)" ,"i");
if(txt.value.search(re) != -1){
var str = txt.value;
str = str.replace(re, "");
str = str.replace(/,,/gi, ",");
str = str.replace(/,$/gi, "");
str = str.replace(/, ,/gi, ",");
txt.value = str.replace(/,,/gi, ",");
}
else{
var str = txt.value ;
str.replace(/,/gi, "");
var t = txt.value + ', ' + word;
txt.value = t.replace(/^, /,'');
}
}
//]]>
</script></body></html>
EOT;
echo
EOT;
您可以这样做……假设您单击的项具有class.item。此外,向您的输入中添加一个类以方便定位。您还需要提取lin当前数据,并为新数据分配逗号和空格
<form role="form" method="POST">
<div class="form-group">
<div class="form-group input-group"> <span class="input-group-addon">Description</span>
<input class="form-control items" type="text" name="descr" maxlength="32" placeholder="Optional" >
</div>
</div>
<button type="submit" class="btn btn-success" name="name_new">Add</button>
</form>
<a href="" class="item" >Car</a>
<a href="" class="item" >House</a>
$(".item").on("click", function(e) {
itemname = $(this).text();
current = $(".items").val();
$(".items").val(current+itemname+", ");
e.preventDefault();
});
描述
添加
$(“.item”)。在(“单击”上,函数(e){
itemname=$(this.text();
当前=$(“.items”).val();
$(“.items”).val(当前+项目名称+”,”;
e、 预防默认值();
});
请显示您已经尝试过的内容。查看此框架:我建议使用或类似的现代控件来执行此类型的多重选择。某个地方有一个错误,请尝试以下操作:car house company house car。它添加正确,但会删除列表中的最后一个单词,而不是某个按钮的单词。如果您是对的,则会发生这种情况因为我们不只是按下按钮,而是取消移动。我更新了答案谢谢Sam。它看起来像我想要的那样工作。我想要的是按钮在按下时移到顶部,而不是表单中的文本,但我想这很难做到。请注意,当car和CARD都在li中时,JSFIDLE示例中的css和html更改不起作用st.你的代码将单词添加到输入中,但一次只能添加一个单词。我需要这样的东西:但没有那个bug。这并不容易。当car和cards都在列表中时,它产生了一个大问题。它比你选择的解决方案工作得更好,因为它不适用于car和cards。我选择的解决方案适用于单词,就像car和cards一样。你是什么意思?car一词在卡片中。当应用程序查找car时,它会找到卡片并将其删除。这不再是问题,它现在正在工作。你的代码会添加这些单词,并且多次添加,这是不正确的,再次按时不会删除该单词。
$(document).ready(function(){
var $desc = $('.result');
var selected = [];
$('.word').click(function(){
var $this = $(this);
var val = $this.text();
if($this.hasClass('added')){
$this.removeClass('added');
selected.splice($.inArray(val, selected),1);
}
else{
$this.addClass('added');
selected.unshift(val);
if(!$this.hasClass('first')){
$this.insertBefore('.first');
$('.first').removeClass('first');
$this.addClass('first');
}
}
$desc.val(selected.join(','));
});
});