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 に答える