我正在教学生如何编写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()。
答案 0 :(得分:5)
这不起作用,你需要邪恶的eval
:
function PgmJSKeyUp() {
eval($(this).val());
}
您还可以使用Function
,setTimeout
或setInterval
(如果您清除它),与字符串一起使用时与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()即将来临(呃!):|