双引号中的字符串无法设置值

Cannot set val when string in double quotes

我有以下变量 -

termText = $("#termBox").val();

其中 $("#termBox").val() 等于 - "\"Test\""

然后我正在创建一个 html 对象,并希望将其值设置为 termText,例如 -

<input type="text" id="secondBox" value="' + termText + '">

但是这不起作用。奇怪的是,当 $("#termBox").val() 中没有双引号时,即 "Test"(在 javascript 中,调试器添加引号以显示它是一个字符串),这工作正常并填充 secondBox 值完美。

我不想从字符串中转义双引号,因为它们是必需的,因为在用户输入 "Term"Term 之间必须有一个定义,但这不适用于双引号.

我该怎么做?

创建输入时,您必须使用 html 等价物对其进行转义。

<input type="text" id="secondBox" value="' + termText.replace(/\"/g,"&quot;") + '">

我不确定您为什么允许用户输入定界符,而是使用 .val() 设置值:

var input = $('<input type="text" id="secondBox"/>').val(termText);

这样 jQuery 会处理任何所需的分隔。

转义引号将在访问值时产生原始引号。

控制台:

var termText = "\"Test\"";
var input = document.createElement('input');
input.setAttribute('value', termText);
console.log(input.value);
console.log(input.outerHTML);

输出:

"Test"
<input value="&quot;Test&quot;">

您不应允许您的用户输入双引号、单引号或反斜杠。它们是您应该从用户输入字段中删除的一些危险字符。如果你需要后面的引语,你应该在幕后添加它们来支持你自己。您将面临跨站脚本 (XSS) 攻击。

您可以通过获取用户输入来实现您想要做的事情;清除危险字符;他们只是将其传递给新输入的值。正如 TrueBlueAussie 提到的那样。稍微修改一下。

var termText = $("#termBox").val();
var input = $('#secoundBox').val(termText);