按钮上的Eval User JS语法单击

时间:2018-01-08 00:29:50

标签: javascript jquery html try-catch eval

我需要一些帮助,试图弄清楚为什么这不起作用。

我要做的是使用“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桌面应用程序..

由于 卡尔

1 个答案:

答案 0 :(得分:1)

它仅触发一次的原因是因为jQuery语法

$(function(){})

表示在Document准备就绪时触发该功能,这只会触发一次。因此,下次当您eval该代码时,Document已准备好并且它不会触发回调。

如果你使js变得像x=y那样无效,那么它每次都会触发。