0

基本上我想创建一个函数,当单击文本时,它会在表单上打印“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”。有没有办法做到这一点?

4

3 回答 3

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/

于 2012-08-28T18:51:24.763 回答
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;
于 2012-08-28T18:49:34.487 回答
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您不应该仅仅因为您想加入其中一些属性而在属性末尾添加空格。

于 2012-08-28T18:53:50.080 回答