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

Posted

技术标签:

【中文标题】如何在某个父 DOM 元素的 html 字符串中包含用户输入?【英文标题】:How to include user input in the html string of a some parent DOM element? 【发布时间】:2019-11-05 23:43:19 【问题描述】:

我想通过运行以下行将 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 中?

更新:

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

【问题讨论】:

$('#myDivId').html() 将给出 div 的整个 HTML 内容,而不是输入框的值 谢谢,我已经添加了问题的更新。所以 div 包含服务器 linput 值,我希望找到一种简单的方法来通过部分 div 捕获所有这些输入。 【参考方案1】:

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

没有反映这一点的 HTML 属性。

如果你想存储它,那么你需要明确存储它。

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

【讨论】:

【参考方案2】:

我不清楚你在问什么。根据我的理解,我提供了一个解决方案。

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>

【讨论】:

【参考方案3】:

这里我使用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>

【讨论】:

以上是关于如何在某个父 DOM 元素的 html 字符串中包含用户输入?的主要内容,如果未能解决你的问题,请参考以下文章

如何将元素移动到 DOM 中的下一个父元素?

DOM CSS选择器:如果li有活动类,如何选择父元素的兄弟姐妹?

javascript怎么操作iframe页面里面的dom元素?

DOM-Element() 对象

DOM节点

已知子元素时如何在jQuery中获取父元素?