Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更新其中一个datatable单元格的多个下拉列表值的最佳方法是什么?_Javascript_Jquery_Ajax_Spring - Fatal编程技术网

Javascript 更新其中一个datatable单元格的多个下拉列表值的最佳方法是什么?

Javascript 更新其中一个datatable单元格的多个下拉列表值的最佳方法是什么?,javascript,jquery,ajax,spring,Javascript,Jquery,Ajax,Spring,我有一个数据表或类似的表: <form> <table> <tr> <th>id</th> <th>status</th> <th>name</th> </tr> <tr> <td>1</td> <td

我有一个数据表或类似的表:

<form>
    <table>
       <tr>
         <th>id</th>
         <th>status</th>
         <th>name</th>
      </tr>
      <tr>
         <td>1</td>
         <td><select class="status">
             <option value="100">OPEN</option>
             <option value="100">CLOSE</option>
             <option value="100">PENDING</option>
         </select></td>
         <td>JOHN</td>
      </tr>
        <tr>
         <td>2</td>
         <td><select class="status">
             <option value="101">OPEN</option>
             <option value="101">CLOSE</option>
             <option value="101">PENDING</option>
         </select></td>
         <td>JACK</td>
      </tr>
   </table>
   <input type="button" value="Update" id="update"/>
</form>

身份证件
地位
名称
1.
打开
接近
悬而未决的
厕所
2.
打开
接近
悬而未决的
杰克
我正在使用javascript、jquery、spring 4.0.1 MVC框架。在这里,我必须在单击更新按钮时使用两个参数调用updateStatus web服务调用,其中包括选项值和选项文本。所以第一个用户将更改下拉列表中的值,当用户点击更新按钮时,我必须进行ajax调用,并将这些参数发送给控制器。如果我的表中有100行数据,那么我只需要发送在下拉列表中更改的值。你能告诉我做这件事最好的方法是什么吗?先谢谢你


一种方法是使用jQuery事件检测任何更改的select字段。每次触发时,您都会存储更改值的索引。然后,当点击更新按钮时,您将遍历存储的索引,检索它们的值,然后将其发送到后端。例如:

var changeArr = [];
$(document).ready(function () {
 $("select").change(function () {
  var index = $(this).parent().siblings("td.idField").html();
  var value = $(this).val();
  changeArr[index] = value;
 });
 $("#update").click(function () {
  console.log(changeArr);
 });
});
小提琴:

使用下面的代码作为解决方案

HTML


我尝试过这个方法,但问题是:如果用户更改第一个td单元格的下拉值,更改第二行td单元格的值,然后再次决定更改第一个下拉单元格的不同值,那么我们在那里有重复的。只是为了确保:我们必须发送选项值和文本的基本列表。不管文本值是多少,第一个下拉列表的选项值都是100,但我们必须发送的文本值只有一个。编辑我的答案,再次检查小提琴。使用关联数组,它现在将存储索引和选择框的关联值。它将在用户更改框且不添加任何重复项时更新的值。
<form>
    <table>
       <tr>
         <th>id</th>
         <th>status</th>
         <th>name</th>
      </tr>
      <tr>
         <td>1</td>
         <td><select class="status" currentVal="OPEN" newVal="OPEN">
             <option value="100">OPEN</option>
             <option value="100">CLOSE</option>
             <option value="100">PENDING</option>
         </select></td>
         <td>JOHN</td>
      </tr>
        <tr>
         <td>2</td>
         <td><select class="status" currentVal="OPEN" newVal="OPEN">
             <option value="101">OPEN</option>
             <option value="101">CLOSE</option>
             <option value="101">PENDING</option>
         </select></td>
         <td>JACK</td>
      </tr>
   </table>
    <input type="button" value="update" id="btnUpdate" onclick="myFunction()" />
</form>
$(".status").change(function(){
    var newText = $('option:selected', $(this)).text();
    $(this).attr("newVal",newText);
});

$("#btnUpdate").click(function(){
    var changedVal = [];
    var allsels = $(".status");
    allsels.each(function (index, selec) {
        var newtext = $(selec).attr("newVal");
        var oldtext = $(selec).attr("currentVal");
        if(newtext != oldtext)
        {
            changedVal.push(newtext);
        }
    });

    //all the changed data will be in "changedVal" array
    alert('make ajax call here');
});