允许用户更改自己的JavaScript
我正在教学生如何编写JavaScript,因此我在页面上有以下内容:允许用户更改自己的JavaScript,javascript,Javascript,我正在教学生如何编写JavaScript,因此我在页面上有以下内容: <textarea name="PgmJS">console.log(1);</textarea> <script id="PgmJS"> </script> 但是浏览器说init()没有定义。这是因为您在textarea的text属性中指定init函数,默认情况下,浏览器的JS编译器不会获取该属性 您需要将init函数定义为普通JS代码,并在其中执行自定义JS代码。我闻到一个
<textarea name="PgmJS">console.log(1);</textarea>
<script id="PgmJS">
</script>
但是浏览器说init()没有定义。这是因为您在textarea的text属性中指定init函数,默认情况下,浏览器的JS编译器不会获取该属性
您需要将init函数定义为普通JS代码,并在其中执行自定义JS代码。我闻到一个eval()的气味(啊!):|它不是这样工作的,你需要邪恶的
eval
:
function PgmJSKeyUp() {
eval($(this).val());
}
您还可以使用函数
、设置超时
或设置间隔
(如果您清除它),当与字符串一起使用时,它们与eval
一样有害。
或者,如果您确实想使用
元素
function PgmJSKeyUp() {
var $s = $('<script type="text/javascript">');
$s.text($(this).val());
$('body').append($s);
}
函数PgmJSKeyUp(){
var$s=$('');
$s.text($(this.val());
$('body')。追加($s);
}
但是请记住,
元素中的JS代码只有在添加到文档中时才会执行。您是在哪里定义的?您所做的只是设置某个文本区域的文本。为什么不干脆eval()
it?或者使用var init=new函数(this.value)请原谅我说的话,但我为你们的学生担心7;^)@诺莱什哈哈,是的。我们要做的是解构一个游戏。我想我需要先删除原来的js,然后发行一个$('PgmJS')。remove()似乎不能做到这一点。当我看到$('PgmJS')时,它会删除,但程序仍然在愉快地运行,尽管它不在dom中。我想这是因为它在一个设定的时间间隔上,因此,从dom中删除它可能不会将其从内存中删除。@Phillip Yes,删除
元素不会撤消或停止其代码。如果要停止设置间隔
,则需要清除间隔
function PgmJSKeyUp() {
var $s = $('<script type="text/javascript">');
$s.text($(this).val());
$('body').append($s);
}