jQuery-为什么在执行函数后此变量不会丢失其值?

时间:2019-04-02 13:17:08

标签: javascript jquery datatables

我是JQuery的新手,我正试图定义一个JQuery函数,目的是编辑表行:模态要求新值,然后该函数更新表行内容。但是,当我选择要编辑的行时,存储该行的变量会“累积”在同一对象中已编辑的所有先前行,并且当我尝试将新值更新为这一行时,所有接收前编辑的行将显示相同的值。为什么会这样?

我将向您显示代码:

$("#table").on("click", ".edit", function() {
  var table = $("#table").DataTable();
  var row = $(this).closest("tr");
  //getting the <tr> content with Datatables API:         
  var values = $table.row(row).data();

  $("#name").val(values[0]);
  $("#surname").val(values[1]);
  $("#city").val(values[2]);
  $("#myModal .modal-footer").on("click", "#confirm", function() {
    var newValues = []
    //getting the <tr> content with Datatables API: 
    //this alert appears as many time as many rows have been changed  
    alert($table.row(row).data());
    //deleting the old data from the server...
    //getting the new values:
    newValues.push($("#name").val());
    newValues.push($("#surname").val());
    newValues.push($("#city").val());
    //adding the new date to the server...
    $("#myModal").modal("hide");
    //update the html table:
    table.row(row).data([newValues[0], newValues[1], newValues[2]]);
  });
});

正如我之前所解释的,.on("click")中的变量“ row” 函数“累积”之前已编辑的所有行。 我以为这是一个作用域探针,所以我也尝试调用一个extern函数,该函数基本上执行相同的操作并利用了event.data对象:

$("#confirm").on("click", {table: table, row: row}, edit);

但是没有运气。如果有人可以帮助我甚至给我一些建议或文档,将不胜感激。

1 个答案:

答案 0 :(得分:0)

您必须使用两个不同的独立函数,这些函数使用外部变量进行连接;您不能以嵌套方式使用.on()