我无法使用 jQuery 发布特定行并获取字段的值,我获取第一行的值而不是提交的行

Posted

技术标签:

【中文标题】我无法使用 jQuery 发布特定行并获取字段的值,我获取第一行的值而不是提交的行【英文标题】:i cannot post a specific row and get value of the fields using jQuery, i get value of first row not the submitted row 【发布时间】:2016-04-03 03:32:57 【问题描述】:

这是我的 jsp! 我提供了一个编辑按钮来使用 ajax 更新城市,我想提交该特定行并获取该特定行的值,例如“id &city”以在 db 中更新,无论我提交第一行还是其他,我都只是得到 first 的值,你帮助可以清除我的概念,提前谢谢!

<table class="table table-responsive" style="width: 50%">
                        <thead>
                              <tr>
                                <th style = "text-align: center;">Id</th>
                                <th style = "text-align: center;">City Name</th>
                                <th style = "text-align: center;">Changes</th>
                              </tr>
                        </thead>
                        <tbody>
                            <c:forEach items="$CityList" var = "ctable">
                              <form:form id="updatecity">
                                  <tr>
                                    <td id="" style = "text-align: center;">
                                        <input type="hidden" id="id" value="$ctable.id">
                                        <c:out value="$ctable.id"></c:out>
                                    </td>
                                    <td id="" style = "text-align: center;">
                                        <input type="hidden" id="city" value="$ctable.city">
                                        <c:out value="$ctable.city"></c:out>
                                    </td>
                                    <td style = "text-align: center;">
                                        <button type="button" class="btn btn-default editbtn">Edit</button>
                                    </td>
                                  </tr>
                              </form:form>
                            </c:forEach>
                        </tbody>
                    </table>

这是我的 JQuery!

<script>
$(document).ready(function () 
$('.editbtn').click(function() 

    var $this = $(this);
    var tds = $this.closest('tr').find('td').filter(function() 
        return $(this).find('.editbtn').length === 0;
    );
    if ($this.html() === 'Edit') 
        $this.html('Save');
        tds.prop('contenteditable', true);
     else 
            $this.html('Edit');
            tds.prop('contenteditable', false);

               var form = $('#updatecity');
               var id = document.getElementById("id").textContent;
               var city = document.getElementById("city").textContent;
               var formData = "id="+id+"&city="+city;
               alert(id + city);
               alert(formData);

            $.ajax(
                    url:  'updatecity',
                    type: 'POST',
                    data: formData,
                    success: function (data)
                         alert('Data submitted successfully!');
                             var result=data;
                             $('#result').attr("value",result);
                         ,
                         error:function (data)
                                alert('There was an error to submit data');
                         

                  );
               
);


);
</script>

【问题讨论】:

你为什么使用空的id属性 【参考方案1】:

您需要为每一行使用唯一的变量名(注意 Counter.index)。

 <c:forEach items="$CityList" var = "ctable" varStatus="Counter">
                          <form:form id="updatecity">
                              <tr>
                                <td id="" style = "text-align: center;">
                                    <input type="hidden" id="id$Counter.index" value="$ctable.id">
                                    <c:out value="$ctable.id"></c:out>
                                </td>
 <td id="" style = "text-align: center;">
                                    <input type="hidden" id="City$Counter.index" value="$ctable.city">
                                    <c:out value="$ctable.city"></c:out>
                                </td>
                                <td><button type="button"
               onclick="postRow($Counter.index)"   value="Post value"></button></td>

现在您仍然需要更改您的 jS 代码来检索选定的行(selectedIndex 只是选定的索引(行))。

 var id = document.getElementById("id"+selectedIndex).textContent;
 var city = document.getElementById("city"+selectedIndex).textContent;

编辑:我已经更新了我的答案。您应该为每一行添加一个按钮,并为其附加一个单击事件,以提交选定的行。

function postRow(selectedIndex)
var $this = $(this);
var tds = $this.closest('tr').find('td').filter(function() 
    return $(this).find('.editbtn').length === 0;
);
if ($this.html() === 'Edit') 
    $this.html('Save');
    tds.prop('contenteditable', true);
 else 
        $this.html('Edit');
        tds.prop('contenteditable', false);

           var form = $('#updatecity');
           var id = document.getElementById("id"+selectedIndex).textContent;
           var city = document.getElementById("city"+selectedIndex).textContent;
           var formData = "id="+id+"&city="+city;
           alert(id + city);
           alert(formData);

        $.ajax(
                url:  'updatecity',
                type: 'POST',
                data: formData,
                success: function (data)
                     alert('Data submitted successfully!');
                         var result=data;
                         $('#result').attr("value",result);
                     ,
                     error:function (data)
                            alert('There was an error to submit data');
                     

              );
          

【讨论】:

发布时出错,“selectedIndex 未定义”, 请帮忙看看 selectedIndex 是什么? 发布时出错,“selectedIndex 未定义”, 我还在烦恼,jsp应该提交一行这样我们就不需要在参数中发送counter,它们应该只有1个id,只有1个城市可以访问,有吗有什么办法吗?? 不,你真的应该有唯一的变量。它不适用于只有 1 个 id 和 1 个城市,因为 javascript 只会找到第一行 id 并提交它们,这不是你想要的。

以上是关于我无法使用 jQuery 发布特定行并获取字段的值,我获取第一行的值而不是提交的行的主要内容,如果未能解决你的问题,请参考以下文章

jquery 想要获取 DOM 中的下一个输入元素

双击datagridview中的行并获取特定单元格的值并将其传递给另一个表单

如何使用 jQuery 遍历表行并获取单元格值

如何使用 jQuery 获取/设置输入字段的值? [复制]

如何使用 Jquery 获取添加的输入字段的值?

插入行并增加字段中的值