0

ループでjspファイルプロパティから値を渡す必要があります。ここにコードがあります

</tr>
                    <%

                    for (int i = 0; i < value.size(); i++) {
                        <html:form action="save" method="post" styleId="update" enctype="multipart/form-data">
                        <input type=hidden id="secfeaturetype" name="secfeaturetype" value="" />

                        <html:file property="testfile" styleId="testfile"/>
                        <input type="button" value="Update" onclick='javascript:check_updatefields()' />
                        </html:form>
                        </td>
                    </tr>

私はjavascriptでいくつかの検証を行おうとしていますが、最初のファイルのみを適切に読み取り、残りは読み取っていません。何か案は ?

function check_updatefields() {
    var file = jQuery('#testfile').val();
    alert(testfile);
 }

ここで何か不足していますか?ありがとう。

4

2 に答える 2

0

「id」はページ内で一意であることを意味するため、複数ある場合、ブラウザーは最初の要素のみを識別します。そのため、ここでは「class」を使用し、styleClass="testfile" のように修正することをお勧めします。js: jQuery('.testfile')。

于 2012-07-31T02:09:09.400 に答える
0

上記のコメントで述べたように、id 属性は一意であると想定されているため、同じ id を持つ要素をループ内に作成すると、無効な html が生成され、$("#testfile")その id を持つ最初の要素のみが選択されます (選択する可能性のある一部のブラウザーを除く)。最後だけ)。

繰り返される要素のより良い解決策は、それらに共通のクラスを与え、それらが属するコンテナーに従って、またはコンテナーでない場合は他の要素との既知の関係によってそれらを区別することです。または、それが含まれる要素で十分に一意である場合はタグ名で選択するか、name属性で選択します。あなたはjQueryを使用しているようで、これらのオプションのいずれかを簡単にします.

コードを次のように整理できると思います。

<table id="yourTableIdHere">
<% for (int i = 0; i < value.size(); i++) { %>
   <tr><td>
      <html:form action="save" method="post" styleId="update" enctype="multipart/form-data">
         <input type=hidden name="secfeaturetype" value="" />
         <html:file property="testfile" styleClass="testfile"/>
         <input type="button" value="Update" />
      </html:form>
   </td></tr>
<% }%>
</table>

私は Struts html タグ ライブラリにあまり詳しくありませんstyleClass="testfile"が、属性をレンダリングすると思いますclass="testfile"(そうでない場合は、適切なものを render に置き換えてくださいclass=...)。インラインonclick=...属性を削除したことに注意してください。これらのハンドラーは、jQuery を使用して 1 ステップで割り当てることができます。

$(document).ready(function() {
   // assign a click handler to all the Update buttons that are
   // within forms within your table element:
   $('#yourTableIdHere form input[type="button"][value="Update"]').click(function() {
       var $myForm = $(this).parent();  // or $(this).closest('form'),
           $myFileInput = $myForm.find('input.testfile'),
           $myHiddenInput = $myForm.find('input[type="hidden"]');
       alert($myFileInput.val());       // alert value of file input
       $myHiddenInput.val("something"); // set value of hidden
   });
});

クリック ハンドラー内にはthisクリックされたボタンがあるため$(this)、親要素に移動して特定のボタンが属するフォームへの参照を取得し、そのフォームから.find()現在のフォームのファイルと非表示の入力を選択するために使用できます。 .

于 2012-07-31T03:03:55.840 に答える