允许用户更改自己的JavaScript

Phi*_*enn 0 javascript

我正在教学生如何编写JavaScript,所以我在页面上有这个:

<textarea name="PgmJS">console.log(1);</textarea>
<script id="PgmJS">
</script>
Run Code Online (Sandbox Code Playgroud)

我想做的是:

$('textarea[name=PgmJS]').on('keyup',PgmJSKeyUp);
function PgmJSKeyUp() {
    $('#PgmJS').text('function init() {' + $(this).val() + '}');
    init();
}
Run Code Online (Sandbox Code Playgroud)

但是浏览器说没有定义init().

Ori*_*iol 5

这不起作用,你需要邪恶eval:

function PgmJSKeyUp() {
    eval($(this).val());
}
Run Code Online (Sandbox Code Playgroud)

您也可以使用Function,setTimeout或者setInterval(如果您清除它),这eval与使用字符串时一样邪恶.或者,如果你真的想使用<script>元素,

function PgmJSKeyUp() {
    var $s = $('<script type="text/javascript">');
    $s.text($(this).val());
    $('body').append($s);
}
Run Code Online (Sandbox Code Playgroud)

但请记住,<script>元素中的JS代码只有在添加到文档时才会执行.