【问题标题】:Detect changed input Values of an HTML input table检测 HTML 输入表的更改输入值
【发布时间】:2018-02-07 01:11:14
【问题描述】:

我试图找出如何在以下预填充输入表中检测更改的值。我从我的 MongoDB 中获取数据并使用 Express-Handlebars 和 nodejs 将数据填充到 HTML。

<form action="/someaction" method="post">
    <table class="responsive-table-input-matrix">
     <thead>
      <tr>
         <th>name</th>
         <th>some setting</th>
         <th>some setting</th>
         <th>some setting</th>
         <th>some setting</th>
      </tr>
    </thead>
     {{# each values }}
        <tbody>
            <tr>
                <td> {{ this.name}} </td>
                <td><input type="string" style="position: relative;" name="some setting" value={{this.some setting}} autofocus></td>
                <td><input type="string" style="position: relative;" name="some setting" value={{ this.some setting}}></td>
                <td><input type="text" style="position: relative;" value="some setting" value={{ this.some setting}}></td>
                <td><input type="text" style="position: relative;" value="some setting" value={{ this.some setting}}></td>
                <input type="hidden" name="someid" value={{ this.some id}}>
            </tr>
        </tbody>
    {{/each}}
   </table>
          <button type="submit" class="btn btn-success">Submit</button>
</form>

当我单击提交按钮时,服务器将收到一个包含所有配置的对象。然后我想写回MongoDB。但我不想将未更改的值写回它。我可以遍历对象,但由于行基本上是无限的,这可能会导致服务器性能问题。

我想知道是否可以检测该特定行中的值是否已更改,并以某种方式在我的服务器收到的对象中标记它。这将允许我只对整个对象进行一次迭代,并且只编写那些更改的配置。

我看到 HTML 或 JS 中有某种 onChanged 可以做到这一点。但我只看到它用于直接更改,我只想在按下按钮时应用更改。

如果可能的话,我想避免使用 Javascript!

我希望我能以某种方式表达我想要实现的目标。 提前致谢!

【问题讨论】:

  • 有点偏题,但 HTML 不知道字符串类型的输入。应该是文本类型。
  • 您将无法避免使用 javascript。您也需要保留旧值并比较值是否已更改。
  • 应该补充说我不太了解 HTML。我有服务器和我的 mongodb,我尝试为它做一个前端。它在我最初的测试中有效!但我会改变那个 THX!
  • “字符串”很可能会起作用,因为如果未定义类型,则默认为文本。 MDN 对此类问题有很大帮助。

标签: javascript html node.js mongodb express-handlebars


【解决方案1】:

您可以用data- 属性标记每一行并使用它来检查它是否发生了变化。

例如在给定的行中:

<tr id="tr1" data-foo-bar="original">
   <td><input type="text" onchange="change();"></td>
</tr> 

当此行中的值发生更改时,您会触发此功能:

function change(){
    document.getElementById("tr1").dataset.fooBar = "modified";
}

然后您可以使用以下方式访问此属性:

if (document.getElementById("tr1").dataset.fooBar == "original"){
    // hasn't been changed

}
else
{
    // it has changed

}

【讨论】:

  • 我现在也做过类似的事情。我使用 get Element by id 来更改我添加到表中的隐藏输入的值。不幸的是,它总是只改变输出对象的索引 0 的值。即使我在第三排左右改变了一些东西。此外,我需要能够在我的 nodejs 服务器代码中访问 HTML 之外的数据标签。哪个不像你提议的那样工作。你知道我该如何解决我的问题吗?
  • 我提出了这个答案,希望它有用。抱歉,恐怕我知道的不够多,无法帮助您。
  • 帮助很大!我设法给 id 一个动态的数字 roresponding 到他们的行。然后我用所说的索引调用js!你想要的就在那里。
  • 很高兴听到 ^_^
猜你喜欢
  • 1970-01-01
  • 2023-03-03
  • 2017-06-03
  • 2016-08-10
  • 2022-01-12
  • 2011-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多