单击按钮时评估用户 JS 语法
Eval User JS Syntax On Button Click
我需要一些帮助来弄清楚为什么这不起作用。
我想做的是使用 "eval()" 评估用户输入的 JS 语法,并在 JS 代码中出现错误时提醒用户。
当用户单击 "Evaluate" 按钮时,会触发 JQuery 事件并提醒用户,但问题是当他们再次单击 "Evaluate" 时没有错误。
HTML:
<label>Example Editor (Ace editor actually used)</label>
<textarea id="editor" rows="5" class="form-control"></textarea>
<button id="evaluate" class="btn btn-success">Evaluate JS</button>
<button id="set_valid" class="btn btn-warning">Set Valid JS</button>
<button id="set_invalid" class="btn btn-danger">Set Invalid JS</button>
JS:
$(function () {
var editor = $("#editor");
$("#evaluate").on("click", function () {
//Evaluate JS
try {
eval(editor.val());
} catch (e) {
alert("There is an error in your JS syntax.");
alert("Click Evaluate JS button again.. does not catch error");
}
});
//Just to set valid js value
$("#set_valid").on("click", function () {
editor.val("$(function(){ \ralert('Valid JS Evaluated.');\r});");
});
//Just to set invalid js value
$("#set_invalid").on("click", function () {
editor.val("$(function(){\r undeclaredVariable \r\r\r});");
});
});
我这里设置了一个fiddle来更详细的解释一下:
https://jsfiddle.net/4vg3d9ka/2/
希望有人能给我解释一下:-)
PS:对于 eval 安全问题,这并不重要,因为它是我正在构建的 NW.js 桌面应用程序..
谢谢
卡尔
它只触发一次的原因是因为 jQuery
语法
$(function(){})
表示当 Document
就绪时触发函数,只会触发一次。因此,下次当您 eval
该代码时,Document
已准备就绪,它不会触发回调。
如果你让你的 js 变成 x=y
这样的东西,它每次都会触发。
我需要一些帮助来弄清楚为什么这不起作用。
我想做的是使用 "eval()" 评估用户输入的 JS 语法,并在 JS 代码中出现错误时提醒用户。
当用户单击 "Evaluate" 按钮时,会触发 JQuery 事件并提醒用户,但问题是当他们再次单击 "Evaluate" 时没有错误。
HTML:
<label>Example Editor (Ace editor actually used)</label>
<textarea id="editor" rows="5" class="form-control"></textarea>
<button id="evaluate" class="btn btn-success">Evaluate JS</button>
<button id="set_valid" class="btn btn-warning">Set Valid JS</button>
<button id="set_invalid" class="btn btn-danger">Set Invalid JS</button>
JS:
$(function () {
var editor = $("#editor");
$("#evaluate").on("click", function () {
//Evaluate JS
try {
eval(editor.val());
} catch (e) {
alert("There is an error in your JS syntax.");
alert("Click Evaluate JS button again.. does not catch error");
}
});
//Just to set valid js value
$("#set_valid").on("click", function () {
editor.val("$(function(){ \ralert('Valid JS Evaluated.');\r});");
});
//Just to set invalid js value
$("#set_invalid").on("click", function () {
editor.val("$(function(){\r undeclaredVariable \r\r\r});");
});
});
我这里设置了一个fiddle来更详细的解释一下:
https://jsfiddle.net/4vg3d9ka/2/
希望有人能给我解释一下:-)
PS:对于 eval 安全问题,这并不重要,因为它是我正在构建的 NW.js 桌面应用程序..
谢谢 卡尔
它只触发一次的原因是因为 jQuery
语法
$(function(){})
表示当 Document
就绪时触发函数,只会触发一次。因此,下次当您 eval
该代码时,Document
已准备就绪,它不会触发回调。
如果你让你的 js 变成 x=y
这样的东西,它每次都会触发。