javascript - 如何在 javascript 中将文本框设置为 eval()

标签 javascript html eval

好的,所以我正在尝试做一个测验,您可以在其中输入一些代码,测验会执行代码以查看您输入的内容是否与答案相同。

这是代码,这是网页的样子:

questions = "PRINT HELLO"
document.getElementById("Question").innerHTML = questions
function check(){
  document.getElementById("answertext").innerHTML = eval(document.getElementById("answerbox").value)
 
}
#answerbox{
  width:100%;
  height:500px;
  font-size:25px;
}
<h1>QUIZZZ</h1>

<h2 id = Question>JAVASCRIPT CONSOLE AND EXERCISES</h1>

<h1 id = "hi"></h1>

<textarea rows="4" cols="50" id = "answerbox">
//put your answer here
</textarea>
<textarea rows= '4' cols = "50" id = "answertext">lol</h1>
</textarea>
<input type = "submit" onclick = "check()">

运行代码看看 我希望用户在文本框中输入 document.write() 语句,并将评估的代码显示在较小的多行文本框中。

尝试在文本框中放置一个 document.write() 语句并运行它。您应该会看到一个新页面,而不是文本框中写的答案。

我知道 document.write 在 javascript 中输出内容是一种不好的做法,我知道您可以编辑原始 HTML,但是有没有其他方法可以让用户在不进行任何这些选择的情况下打印消息?

最佳答案

Don't use eval.

使用 eval 被认为是一种不良做法。阅读更多为什么 here .您可以要求您的用户使用如下所示的 return 语句返回答案,而不是要求他们做一些复杂的事情,例如 document.write()

// Ask them to do this:
var codeFromTheAnswerBox = "var answer = 'HELLO'; return answer;"
// instead of this:
// var codeFromTheAnswerBox = "var answer = 'HELLO'; document.write(answer)";

// execute user's code
var code = new Function(codeFromTheAnswerBox);
var returnValue = code();

// Now do whatever you want to do with the answer like the following
alert("Your answer is " + returnValue);

关于javascript - 如何在 javascript 中将文本框设置为 eval(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51833243/

相关文章:

javascript - 在 JSTree 中禁用多项选择不起作用

javascript - 将输入值附加到匹配的 "name"标签 div?

javascript - 使用javascript更改输入[复选框或单选按钮]时如何获取(或触发)更改事件

html - 了解 CSS 选择器优先级/特殊性

python - 为什么使用 'eval' 是一种不好的做法?

javascript - Angularjs/js 用于从输入计算 $eval

javascript - 如何安全地评估在 JavaScript 中表示为字符串的 bool 表达式?

javascript - 在简写 if 语句中使用 Angular Pipe

javascript - 获取 ng-repeat 内元素的值

JavaScript 按属性值对字典进行排序