如何将用户输入包含在某些父 DOM 元素的 html 字符串中?

How to include user input in the html string of a some parent DOM element?

我想将 div 容器的内容存储在 windows 历史记录中,通过 运行 以下行:

window.history.pushState($('#myDivId').html(), "title", 'some url');

我稍后会在用户按下后退按钮时使用此信息。


问题:

用户有一个表单要填写,只需一次输入。用户输入他的名字(比如 John)并点击提交。 onSubmit 函数被触发,在这里我得到父 div 的 html 内容并将其存储在历史对象中。问题是,此示例中的用户输入 (John) 未被捕获。

下面的屏幕截图显示了我的脚本的输出:

代码片段

function onSubmit() {
   var str = $('#myDivId').html();
   alert("this goes to windows history: " + str);
   // window.history.pushState($('#myDivId').html(), "title", 'some url');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form onsubmit="onSubmit()">
   <div id="myDivId">
      First name: <input id="firstNameId" type="text" name="FirstName" value=""><br>
      <input type="submit" value="submit">
   </div>
</form>

如何在将用户输入推送到历史记录之前将其包含在 str 中?

更新:

这是一个简化的例子,在真实场景中我在容器中有几个输入字段。所以我正在寻找一种方法来通过容器捕获所有输入值。

value 属性表示字段的默认 值,而不是当前值。

没有 HTML 属性反映这一点。

如果你想存储它,那么你需要显式存储它。

我会通过使用 serializeArray()(并将其转换为 JSON 以存储在历史记录中)来解决这个问题,然后遍历它以将数据恢复到表单中。

我不清楚你在问什么。我已经按照我的理解提供了解决方案。

function onSubmit() {
  $("#firstNameId").attr('value', $("#firstNameId").val())
   var str = $('#myDivId').html();
   alert("this goes to windows history: " + str);
   // window.history.pushState($('#myDivId').html(), "title", 'some url');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form onsubmit="onSubmit()">
   <div id="myDivId">
      First name: <input id="firstNameId" type="text" name="FirstName" value=""><br>
      <input type="submit" value="submit">
   </div>
</form>

我在这里使用 delegate eventvalue 属性 设置为 value 属性

function onSubmit() {
   var str = $('#myDivId').html();
   alert("this goes to windows history: " + str);
   // window.history.pushState($('#myDivId').html(), "title", 'some url');
}

$(document).on('input', '.attr-input', function() {
  $(this).attr('value', this.value)
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form onsubmit="onSubmit()">
   <div id="myDivId">
      First name: <input id="firstNameId" class="attr-input" type="text" name="FirstName" value=""><br>
      <input type="submit" value="submit">
   </div>
</form>