1

実際に 1 回反復しているかどうかはわかりませんが、生成されるダイアログは 1 つだけです。jquery ループは、1 からカウントアップする各 PHP ループ反復の非表示の入力を対象としています。合計 2 つの「roomID」があります。

alert を使用すると 2 つ表示されますが、ダイアログが jquery に割り当てられていないため、最初の 1 つが表示されます。なぜこうなった?

これを行うためのより良い方法はありますか:

$('input#roomID').each(function() {
   var roomID = $('input#roomID').val();
   alert($(this).val());

            $( 'div.edit-dialog-'+roomID ).dialog({ 
                autoOpen: false,
                height: 500,
                width: 550,
                modal: true,
                position:['middle','middle'],
                draggable: true,
                //resizable: true,
                buttons: {
                    Cancel: function() {
                        $( this ).dialog( "close" );
                    }
                },
                    close: function() {
                        allFields.val( "" ).removeClass( "ui-state-error" );
                    }
            });

            $( 'a.room-edit-'+roomID).click(function() {
                $( 'div.edit-dialog-'+roomID ).dialog( "open" );
            });
    });

私はJqueryに少し慣れていません。

4

2 に答える 2

4

ID「#」を選択しています。

Dom には一意の ID が必要です。

代わりにクラスにしてみてください。

だから代わりに

<input id="roomID" type="text" />

クラスを追加する

<input class="roomID" type="text" />

それで

$('input.roomID').each();

クラスでページ上のすべての入力を選択しますroomID

編集

jQuery の各関数は、セレクターの一致を通過します。たとえば、次の HTML があるとします。

<input class="hello" />
<input class="hello" />
<span class="hello">text</span>

次に、次のようにそれぞれを呼び出すと:

$('.hello').each(function(i, ele){});

thisjQuery は、関数が個々の dom 要素を持つ (またはスコープされる)たびに、関数を 3 回呼び出します。これは、dom に表示される順序で行われます。inputだから、それを初めて通過するのはその時inputですspan

毎回this、jQuery マップ要素ではなく、それぞれの dom 要素を指します。$(this)そのため、jquery のヘルパー メソッドにアクセスする必要があるのは、this.val().

また、2 つの引数を使用して関数を呼び出します。最初の引数は反復回数であるため、spanこの場合は 2 になります。2 番目の引数は再び要素です。

于 2013-02-12T02:03:21.300 に答える
0

別のセレクターを使用して入力をカスタマイズする場合、これははるかに優れています。

 <input name="new3" />
 <input name="new2" />
 <input name="new1" />

 <script>
     $('input[name*="new"]').val('xxxxx');
 </script>
于 2013-02-12T02:12:52.257 に答える