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 属性应该是唯一的,因此在循环中创建具有相同 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"(如果不是,请替换任何合适的东西来渲染class=...)。请注意,我删除了您的内联onclick=...属性。您可以使用 jQuery 一步分配这些处理程序:

$(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 回答
0

“id”,表示它在你的页面中是唯一的,所以如果有多个,浏览器只会识别第一个元素,所以这里你最好使用“class”,更正如下:styleClass="testfile"。js:jQuery('.testfile')。

于 2012-07-31T02:09:09.400 回答