我需要一些帮助,试图弄清楚为什么这不起作用。
我要做的是使用“eval()”评估用户输入JS语法,并在JS代码中出现错误时向用户发出警告。
当用户单击“评估”按钮时,会触发JQuery事件并向用户发出警报,但问题是当他们再次单击“评估”时没有错误。
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});");
});
});
我在这里设置了一个小提琴来更详细地解释:
https://jsfiddle.net/4vg3d9ka/2/
希望有人可以向我解释:-)
PS:对于eval安全问题,这无关紧要,因为它是我正在构建的NW.js桌面应用程序..
由于 卡尔
答案 0 :(得分:1)
它仅触发一次的原因是因为jQuery
语法
$(function(){})
表示在Document
准备就绪时触发该功能,这只会触发一次。因此,下次当您eval
该代码时,Document
已准备好并且它不会触发回调。
如果你使js变得像x=y
那样无效,那么它每次都会触发。