允许用户更改自己的JavaScript

时间:2014-01-01 16:15:27

标签: javascript

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

<textarea name="PgmJS">console.log(1);</textarea>
<script id="PgmJS">
</script>

我想做的是:

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

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

2 个答案:

答案 0 :(得分:5)

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

function PgmJSKeyUp() {
    eval($(this).val());
}

您还可以使用FunctionsetTimeoutsetInterval(如果您清除它),与字符串一起使用时与eval一样邪恶。 或者,如果您真的想使用<script>元素,

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

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

答案 1 :(得分:2)

那是因为你在textarea的text属性中指定了init函数 - 默认情况下,它不被浏览器的JS编译器选中。

您需要将init函数定义为普通的JS代码,并在其中执行自定义JS代码。我闻到一个eval()即将来临(呃!):|