http://q.hatena.ne.jp/1182224916

で質問している内容で
テキストボックスを追加すると
今まで入力していた内容が
消されてしまいます。

これを追加するときに入力された値を
表示したまま追加するには
どうしたらいいのでしょうか?

回答の条件
  • 1人5回まで
  • 登録:2007/06/20 11:05:28
  • 終了:2007/06/21 16:09:44

回答(2件)

id:tully No.1

tully回答回数40ベストアンサー獲得回数32007/06/20 11:54:54

ポイント10pt

CSS(クロスサイトスクリプト)を考慮していないからではないでしょうか?

IEとFireFoxでは、同じスクリプトで両方動かないものがあるはずです。(昔の記憶なのであいまいですが、IEとNN(ネットスケープ)で、それぞれのソースを記述したりすることが必要でした)

id:openseed No.2

openseed回答回数51ベストアンサー獲得回数62007/06/20 21:47:30

ポイント60pt

スクラッチで書き直してみました。


以下は、IE6とFF2 for xpでのみ確認しています。

<script language="JavaScript" type="text/javascript">
<!--


function TextBoxArea(id){
    this.IDNumber = 0;
    this.id = id;

    return this;
}

TextBoxArea.prototype = {
    add: function AddTextBox(){
        var obj = document.getElementById(this.id);


        var basename = this.id + this.IDNumber;


        var panel = document.createElement("div");
        panel.innerHTML=
                '<input name="'+basename+'" type="text" />' + 
                '<input name="caller'+basename+'" type="radio" />' + 
                'テスト完了' + 
                '<input name="ok'+basename+'" type="radio" />' + 
                '日本語完了';

        obj.appendChild(panel);

        this.IDNumber++;


    },
    remove: function RemoveTextBox() {
        var obj = document.getElementById(this.id);
        if(obj.lastChild){
            obj.removeChild(obj.lastChild);
        }
    }
}

var textArea = new TextBoxArea('test');

// -->
</script>
<body>
<form>
<table border="1">
<tr>
<td>テスト項目</td>
<td><input type=button value=" add " onClick="textArea.add();"></td>
<td id ="test9_a"><input type=button value=" del " onClick="textArea.remove();"></td>
<td id ="test"></td>
</tr>
</table>
</form>
</body>

※ appendChildでradioボタンを追加するとWinIE5,6では選択できなくなる、という問題があるようです。そのため、innerHTML と appendChild を組み合わせる必要があります。

http://www.google.co.jp/search?hl=ja&rlz=1T4GGLJ_jaJP173JP17...




うまくいかなかったコード・・・。念のため。

    add: function AddTextBox(){
        var obj = document.getElementById(this.id);

        var panel = document.createElement("div");
        var elem;

        var basename = this.id + this.IDNumber;

        elem = document.createElement("input");
        elem.setAttribute("name", basename);
        elem.setAttribute("type", "text");
        panel.appendChild(elem);

        elem = document.createElement("input");
        elem.setAttribute("name", "caller" + basename);
        elem.setAttribute("type", "radio");
        panel.appendChild(elem);

        panel.appendChild(document.createTextNode("テスト完了"));

        elem = document.createElement("input");
        elem.setAttribute("type", "radio");
        elem.setAttribute("name", "ok" + basename);

        panel.appendChild(elem);

        panel.appendChild(document.createTextNode("日本語完了"));

        obj.appendChild(panel);


        this.IDNumber++;
    }

id:hopefully

なるほどですw

今、FireFoxでやったのですが

追加する際にテーブルの中から

はみだしてしまいます。

削除するとテーブルの中に収まるのですが

追加したらテーブル内で収まるように

出来ますか?

2007/06/21 10:10:37
  • id:Kenju
    innerHTMLを使わずにcreateElementとappendChildで追加していけば対応できますよ。
  • id:openseed
    http://q.hatena.ne.jp/1182224916
    でのサンプルも、テーブルに収まらなかったので、そのままにしていたのですが・・・。

    resize: function(){
     var obj = document.getElementById(this.id);
     obj.style.height = 25 * obj.childNodes.length;
    }

    を追加して、
    appendChild、removeChild のあとで、this.resize(); を呼び出してみてはいかがでしょうか?
    ちなみに、25 は適当な値です・・・。
    http://www.nextindex.net/web/CSS/formatting2.html
  • id:hopefully
    出来ましたw
    ありがとうございますw

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません