0

次のコードでいくつかの入力フィールドボックスを作成しました。

<script type='text/javascript'>//<![CDATA[ 
    $(window).load(function(){
        $('.add').click(function(){
            par_id=$(this).parent().attr('id');
            count=$("#"+par_id+"> input").length;
            id=par_id.toString();
            $(this).parent().append("<br/><input type='text' id='"+id+"'>");
        });
    });//]]>  
</script>

新しいフィールドを動的に追加できる入力フィールドを作成するために、前述のコードを使用しています。

このコードは複数の同一のフォームIDを作成しますが、foreachコマンドを使用してまとめて出力できるように、複数の同一のフォーム名を作成する必要があります。

これを使って入力データをPHPに出力したい

<?php
    foreach($_POST['formid'] as $value) {
        echo "$value <br />";
    }
?>

私が聞きたいのは、foreachコマンドはフォーム名からのデータのみを出力するということですが、私が使用しているjavascriptコードは、フォーム名ではなく、フォームIDによってより多くの入力フォームを作成します。

したがって、フォームIDではなくフォームでより多くの入力ボックスを作成するコードが必要です。

別のウェブサイトから入手したため、元のコードを変更する方法がわかりません。

助けてください!

4

3 に答える 3

1

javascript 関数によって挿入されるコードに name 属性を追加するだけです。

オリジナル:

$(this).parent().append("<br/><input type='text' id='"+id+"'>");

修正:

$(this).parent().append("<br/><input type='text' name='yourinputname' id='"+id+"'>");

編集:ただ、後付け...

ID が役に立たず、name 属性のみが必要な場合、このコードの大部分は不要であり、次のように削減できます。

<script type='text/javascript'>//<![CDATA[ 
    $(window).load(function(){
        $('.add').click(function(){
            $(this).parent().append("<br/><input type='text' name='yourinputname');
        });
    });//]]>  
</script>
于 2012-10-08T02:03:54.567 に答える
1

ただのコメント:

> par_id = $(this).parent().attr('id');

変数par_idはローカルに保持する必要があるため、宣言します。式はより単純で効率的で、次のように入力する必要がありません。

var par_id = this.parentNode.id;

それにかんする:

> count=$("#"+par_id+"> input").length;

他の回答で指摘されているように、count 変数は使用されません (ローカルにとどまるように宣言する必要があります)。par_idid を持つ要素を複数回使用したいので、次のことを考慮してください。

var par_el = this.parentNode;
var par_id = par_el.id;
var count = $(par_el).find('input').length;

利用可能な場所でプロパティ アクセスを使用することは、関数を呼び出して同じことを行うよりもはるかに簡単で効率的です。

于 2012-10-08T04:12:15.910 に答える
1

@Chung - 私はあなたの質問を理解しようとし、以下の提案を思いつきましたが、あなたの質問は非常に曖昧で、混乱を招き、誤解を招く可能性があることを理解する必要があります.

コードに最小限の変更を加える:

$(document).ready(function() {
    $('.add').click(function() {
        par_id = $(this).parent().attr('id');
        par_name = $(this).parent().attr('name');
        count = $("#" + par_id + "> input").length;
        id = par_id.toString();
        $(this).parent().append("<br/><input type='text' name='" + par_name + "' id='" + id + "'>");
    });
});​

ここでデモされているように:
http://jsfiddle.net/pratik136/2nV3m/

いくつかの疑問/提案:

  • count使用していないときに があるのはなぜですか?par_idは常に文字列ですが、 にキャストしてstringいますcount
  • 私の提案した状態では、には同じ を持つform複数の が含まれているため、 を使用して反復処理することはできません。代わりに、それらすべての要素の をリストとして受け取ります。inputnameforeachvaluecomma-delimited
  • を使用して各要素に異なる名前を付け、代わりにcountを使用してサーバー側でループしたいですか? ここでデモされているように:http://jsfiddle.net/pratik136/7pK29/forforeach
于 2012-10-08T00:49:12.977 に答える