javascript - 元素内容更改的问题 - 我怎样才能获得新值?

标签 javascript jquery html

我想生成一个简单的表单,它显示数据库中的数据并让用户更新此数据。

我通过 servlet 接收数据并将其以 JSON 文件的形式传递给前端。我生成一个表格并显示值。前两个值是整数,后两个是文本,所以我选择<input type='number \>对于第一个和 <textarea><\textarea>最后。

问题:当我通过输入新文本或数字来更改内容并单击按钮时,生成的 JSON 仍然显示旧值。我怎样才能得到新的?

var $tbl = $("#table1");
var index = 1
var item = ["id", "1", "2", "text1", "text2"]
$(
    "<tr><th>Number</th><th>Number 2</th><th>Text</th><th>Text 2</th></tr>")
  .appendTo($tbl)
$("<tr><td><input type='number' id='" +
    index +
    "_from' value='" +
    item[1] +
    "'/></td><td><input type='number' id='" +
    index +
    "_to' value='" +
    item[2] +
    "' /></td><td><textarea rows='1' cols='40' id='" +
    index +
    "_sub'>" +
    item[3] +
    "</textarea></td><td><textarea rows='6' cols='50' id='" +
    index +
    "_txt'>" +
    item[4] +
    "</textarea></td></tr>")
  .appendTo($tbl);

$("body").append("<input type='button' id='btn_1' value='button'>");
$("#btn_1").click(htmltable2json)

function htmltable2json() {
  var json = '{';
  var myRows = [];
  var headersText = [];
  var $headers = $("#table1 th");

  var $rows = $("#table1 tr").each(function(index) {
    $cells = $(this).find("td");
    myRows[index - 1] = {};

    $cells.each(function(cellIndex) {
      // Set the header text
      if (headersText[cellIndex] === undefined) {
        headersText[cellIndex] = $($headers[cellIndex]).text();
      }
      myRows[index - 1][headersText[cellIndex]] = $($(this).html()).val() ? $($(this).html()).val() : $(this).text();
    });
  });
  alert(JSON.stringify(myRows));
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id="table1"></table>

最佳答案

问题在于如何从单元格输入中获取值。

您应该使用类似 $(this).children().first().val()

我建议您在输入中添加一个类,这样选择它们会更容易。

var $tbl = $("#table1");
var index = 1
var item = ["id", "1", "2", "text1", "text2"]
$(
    "<tr><th>Number</th><th>Number 2</th><th>Text</th><th>Text 2</th></tr>")
  .appendTo($tbl)
$("<tr><td><input type='number' id='" +
    index +
    "_from' value='" +
    item[1] +
    "'/></td><td><input type='number' id='" +
    index +
    "_to' value='" +
    item[2] +
    "' /></td><td><textarea rows='1' cols='40' id='" +
    index +
    "_sub'>" +
    item[3] +
    "</textarea></td><td><textarea rows='6' cols='50' id='" +
    index +
    "_txt'>" +
    item[4] +
    "</textarea></td></tr>")
  .appendTo($tbl);

$("body").append("<input type='button' id='btn_1' value='button'>");
$("#btn_1").click(htmltable2json)

function htmltable2json() {
  var json = '{';
  var myRows = [];
  var headersText = [];
  var $headers = $("#table1 th");

  var $rows = $("#table1 tr").each(function(index) {
    $cells = $(this).find("td");
    myRows[index - 1] = {};

    $cells.each(function(cellIndex) {
      // Set the header text
      if (headersText[cellIndex] === undefined) {
        headersText[cellIndex] = $($headers[cellIndex]).text();
      }
      myRows[index - 1][headersText[cellIndex]] = $(this).children().first().val() ? $(this).children().first().val() : $(this).text();
    });
  });
  alert(JSON.stringify(myRows));
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id="table1"></table>

关于javascript - 元素内容更改的问题 - 我怎样才能获得新值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57202092/

相关文章:

javascript - 将 "select"下拉列表转换为列表下拉列表后,div 显示/隐藏停止工作

javascript - 检查文本何时位于特定位置

jquery - 如何使用jquery从隐藏输入类型数组中获取值

用于检查空数据字段的 JavaScript 表单验证部分不起作用

html - 如何使用 CSS 水平显示组件

javascript - 未捕获类型错误 : Cannot read property of undefined

javascript - React 将普通事件处理程序委托(delegate)给文档,绑定(bind)函数怎么样?

javascript - 单击 anchor 元素的某个子元素时不重定向

jquery - 使用 $.getJson 从 LocalDrive 读取 Json 文件

javascript - HTML - 单击按钮会导致列表因未知原因滚动到顶部