1

一意の ID と名前を必要とする複数の入力を持つ行を動的に生成するテーブルがあります。これを処理するために jQuery バリデーターに submitHandler 関数を作成しましたが、次の 2 つの問題が発生しています。

  1. 私のテーブルには、JQuery が繰り返しに含めるヘッダー行があります
  2. 各行の入力タイプではなく、すべての入力タイプが各ループに割り当てられています。

これが私のコードです:

var accessorylist = document.getElementById("accessorybody");
            var i = 1;
            $("tr").each(function(){
                var e = this;
                $('select').attr({
                    'id': 'accessory' + i,
                    'name': 'accessory' + i
                });
                $('input[type=checkbox]').attr({
                    'id': 'accessoryrequired' + i,
                    'name': 'accessoryrequired' + i
                });
                $('input[type=text]').attr({
                    'id':'accessoryqty' + i,
                    'name': 'accessoryqty' + i
                });
                alert(e);
                i++;
                alert(i);
            });
            alert(accessorylist);
            return false;

アラートと return false は、私にとって単なるデバッグ行です。回答番号 2 については、行 (e) だけに入力フォーカスを指定する必要があると確信していますが、うまくいかないことをいくつか試しましたが、少し困惑しています。ヘッダー行に関しては、thead タグでラップされています。「accessorybody」は、データ行のみを含む tbody タグであるため、ループにどのように、またはなぜ含まれているのかわかりません。

4

3 に答える 3

1

1):notおよび:firstjQuery セレクターを使用して最初の行をスキップする

$("tr:not(:first)").each(function(){ ... });

2) thisjQuery オブジェクトとして使用して、行 ( $this) をコンテキストとして使用して入力要素を検索します

var $this = $(this);
...
$this.find('select').attr({ ... })
$this.find('input[type=checkbox]').attr({ ... })
$this.find('input[type=text]').attr({ ... })
...
于 2012-10-15T14:32:42.083 に答える
1

の内容を確認することで、ヘッダー行の繰り返しをスキップできますtr。たとえば、次のようになります。

if (!$(this).has('th').length) {
  // run code
}

<th>または、ループを変更して、 sを含まない行のみをループするようにすることもできます

$('tr:not(:has(th))').each(function() { 
  // run code
});

2 番目の問題に対応して、セレクターにコンテキストを与えるだけです。

$('select', this);

そうすれば、現在の行の要素のみが影響を受けます。

于 2012-10-15T14:28:35.150 に答える
0
  1. th タグを使用するか、ヘッダー行に ID を指定してスキップできるようにするか、最初の行をスキップするだけです...

  2. グローバルセレクターではなく、.children()関数を使用してください。

例: this.children('select').attr( ...

于 2012-10-15T14:27:08.117 に答える