【发布时间】:2014-06-30 12:18:53
【问题描述】:
这应该很简单,但我想不通。
我想让用户编辑一个值。为此,单击后,该值将变为文本框。但是,如果用户在文本框中的用户输入中加上引号,则文本框的value="" 属性会过早关闭,并且引号和它之后的任何内容都会丢失。转义(已弃用)和 encodeURI 只是用 asci 替换引号,这在文本框中看起来不太好。
感谢任何人对此问题的解决方案:
这里是javascript:
function editText() {
var text = document.getElementById('text').innerHTML;
var edittext = '<input type="text" size=60 name="name" id="name" value="'+text+'"><input type="button" value="Save" onclick="storeText(\'name\');">';
document.getElementById('text').innerHTML = edittext
return false;
}
html:
Text: <span id="text" onclick="editText()";>He said "that's cool"</span>
jsfiddle
更新:
与那些将其标记为重复的人所说的相反,重复的问题没有为我的问题提供答案。他们可能想重新阅读我的问题和所谓的重复,并在我的问题中精神上注册单词"programmatic",并实际查看此处代码的重复相对中的代码......只是说。
我最终将文本框更改为文本区域作为一种解决方法,因为似乎没有一种直接的方法可以以编程方式在文本框中转义引号。
下面 Merlin 的答案是一种可能的方法,但调用第二个函数比仅用 textarea 替换 textbox 更复杂。无论如何,我无法让它发挥作用,但我感谢 Merlin 的回答并投了赞成票。
【问题讨论】:
-
只是不要使用
.innerHTML,而是适当的东西…… -
您可以使用字符串替换将`\`添加到每个
",但出于安全原因,直接从用户输入构造 HTML 通常是个坏主意。跨度> -
@Bergi 尝试了 .textContent 和同样的问题。 .value 未定义。你有什么建议?
标签: javascript escaping special-characters