这不是我真正想做的事情,只是想知道它是否可能。
假设我有一个这样的页面,它只是一个标题和一个输入框。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>2014-4-24-01</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
function jQuerySetup() {
if($) {
$(document).ready( function () {
$("body").on("keypress", "input", function ( event ){
if(event.keyCode == 13){
$("body").get(0).innerHTML = this.value;
}
});
});
} else {
window.setTimeout(jQuerySetup, 250);
}
}
jQuerySetup();
</script>
</head>
<body>
<h3>Test</h3>
<input type="text" width="20">
<div id="testDiv"></div>
</body>
</html>
如果我在输入框中输入以下内容并点击回车,则没有任何反应。那是为什么?
<script>window.setTimeout(function () { alert("Uh oh"); }, 1000);</script>
编辑:我知道有人通过控制台窗口运行JavaScript并获得类似的效果非常容易。但我的问题更多的是理解为什么以上是不可能的(或者为什么我没有把它弄好)。
答案 0 :(得分:2)
innerHTML
不会执行脚本,而是使用jQuery html
。
$("body").html(this.value);
答案 1 :(得分:1)
可以使用eval()
从输入框运行脚本。由于specification states通过.innerHTML
插入的脚本不应被执行(它在该部分的末尾是一个大的绿色注释),因此您的工作方式无法工作。< / p>
答案 2 :(得分:0)
答案 3 :(得分:0)
您不需要if($) {
和setTimeout
,因为它由$(document).ready
处理。
您可以尝试:
<script>
$(document).ready( function () {
$("body").on("keypress", "input", function ( event ){
if(event.keyCode == 13){
$("body").get(0).innerHTML = this.value;
}
});
});
</script>
工作示例here