单击时从表单中删除特定文本

时间:2012-08-28 18:43:34

标签: javascript forms text

基本上我想创建一个函数,当单击文本时,它会在表单上打印“id”。当它再次被点击时,只删除'id'(之前点击/打印'id'仍然存在)。

到目前为止我的打印脚本:

function imprime01(obj) {
        document.form2.text.value = document.form2.text.value +  obj.title;
         }
div

<div onclick="imprime01(this);" title="240 ">240</div>
<div onclick="imprime01(this);" title="230 ">230</div>
<div onclick="imprime01(this);" title="220 ">220</div>

所以我想要的是:当我点击240,230时,它在表格上打印“240 230”,当我再次点击“240”时,它只从表格中删除“240”。有没有办法实现这个目标?

3 个答案:

答案 0 :(得分:1)

有很多方法可以做到这一点。

我会将你的id存储在一个数组中。在您的单击处理程序中,测试数组中是否存在id,如果存在则删除它,否则添加它。然后将数组中的所有ID写入文本框:

var idList = [];
function imprime01(obj) {
    var id = obj.title;
    var idIndex = idList.indexOf(id);
    if (idIndex > -1) {
        idList.splice(idIndex, 1);
    }
    else {
        idList.push(id);
    }
    document.form2.text.value = idList.join(" ");
 }

这可能比简单的字符串替换更复杂,但它为您提供了以后可能有用的其他功能。例如,如果程序的另一部分需要知道选择了哪些ID,则它们已在数组中可用。

编辑:您可以使用string.split(" ")在点击处理程序中动态生成数组,而不是将数组存储在变量中:

function imprime01(obj) {
    var id = obj.title;
    var idList = document.form2.text.value.split(" ");
    var idIndex = idList.indexOf(id);
    if (idIndex > -1) {
        idList.splice(idIndex, 1);
    }
    else {
        idList.push(id);
    }
    document.form2.text.value = idList.join(" ");
 }​

工作演示: http://jsfiddle.net/gilly3/qWRct/

答案 1 :(得分:0)

使用replaceindexOf函数:

var str = document.form2.text.value;
if(str.indexOf(obj.title) != -1)
    document.form2.text.value = str.replace(obj.title,""); 
else
    document.form2.text.value = str +  obj.title;

答案 2 :(得分:0)

请参阅http://jsfiddle.net/BdEMx/

function imprime01(obj) {
    var arr=document.form2.text.value?document.form2.text.value.split(' '):[];
    var i=arr.indexOf(obj.title);
    if(i===-1){
        arr.push(obj.title);
    }else{
        arr.splice(i,1);
    }
    document.form2.text.value = arr.join(' ');
}

您不应仅在title属性的末尾添加空格,因为您想加入其中一些空格。