gpt4 book ai didi

javascript - onload 函数和 setTimeout 不起作用(更新)

转载 作者:行者123 更新时间:2023-11-28 20:02:36 25 4
gpt4 key购买 nike

test2.html

<!DOCTYPE html>
<html>
<head>
<title>test</title>
<style>
form {
width: 330px;
margin: 20px;
background-color: pink;
Padding: 20px;
}

input {
text-align: right;
}
</style>

<script type="text/javascript">
var pw;
function create_form(_name, _action, _method, _target) {

var instance = document.createElement("form");
instance.name = _name;
instance.action = _action;
instance.method = _method;
instance.target = _target;

return instance;
}

function create_input_to_form(_form, _type, _name, _value) {
var form_instance = _form;
var input_instance = document.createElement("input");

input_instance.type = _type;
input_instance.name = _name;
input_instance.value = _value;

form_instance.insertBefore(input_instance, null);

return form_instance;
}

function insert_form_to_html(_form) {
document.body.insertBefore(_form, null);
}

function init() {

var instance = create_form(
"nuForm",
"Test3.html",
"post", "postWindow");
insert_form_to_html(instance);
pw = window.open("", "postWindow", "width=300, height=400");
instance.submit();

if (pw == null) {
alert("error;");
}
else {
pw.document.onload = function() {
alert("wow");
}
document.write("1");
pw.onload = function() {
alert("wow2");
}
document.write("2");
setTimeout(function(){
alert("wow3");
alert(pw.document.title);
}, 3000);
document.write("3");
}

}
</script>
</head>

<body onLoad="init();">

</body>
</html>

test3.html

<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
</head>
<body>popup bodys
</body>
</html>

alert("wow");,alert("wow2");,alert(pw.document.title);不工作。文件位于同一文件夹中,创建弹出窗口时不会出现错误和警告。

我无法理解为什么 pw 不是局部变量,但是仅在 Init() 函数中使用 pw 变量,并在超时时崩溃。

我在谷歌浏览器中测试了它

<小时/>

有一个固定的test2.html代码。

<!DOCTYPE html>
<html>
<head>
<title>test</title>
<style>
form {
width: 330px;
margin: 20px;
background-color: pink;
Padding: 20px;
}

input {
text-align: right;
}
</style>

<script type="text/javascript">





var pw;
function create_form(_name, _action, _method, _target) {

var instance = document.createElement("form");
instance.name = _name;
instance.action = _action;
instance.method = _method;
instance.target = _target;

return instance;
}

function create_input_to_form(_form, _type, _name, _value) {
var form_instance = _form;
var input_instance = document.createElement("input");

input_instance.type = _type;
input_instance.name = _name;
input_instance.value = _value;

form_instance.insertBefore(input_instance, null);

return form_instance;
}

function insert_form_to_html(_form) {
document.body.insertBefore(_form, null);
}

function init() {
var instance = create_form("nuForm", "Test3.html", "post", "postWindow");
insert_form_to_html(instance);
pw = window.open("", "postWindow", "width=300, height=400");
instance.submit();

if (pw == null) {
alert("error;");
} else {


pw.onload = function() {
alert("wow2");
console.log("4");
}
console.log("2");
console.log(pw);
setTimeout(function() {
if (pw==null) {
alert("pw is null");
}
else {
//console.log(document.domain);
console.log(pw);
//alert(pw.title);
}

}, 3000);
console.log("3");
}

}
</script>
</head>

<body onLoad="init();">

</body>
</html>

第一个问题是“alert("wow2");”和“console.log(“4”);”当弹出窗口完成加载时,代码不会执行。

第二个问题是“console.log(pw);” setTimeout() 输出空值,但另一个“console.log(pw)”输出右侧弹出窗口。尽管 pw 不是局部变量,为什么 pw 变量消失了?

执行此文件时有google chrome控制台

2 Test2.html:69
'window.webkitStorageInfo' is deprecated. Please use 'navigator.webkitTemporaryStorage' or 'navigator.webkitPersistentStorage' instead. VM56:423
Window {top: Window, window: Window, location: Location, external: Object, chrome: Object…}
Test2.html:70
3 Test2.html:82
Window {}

最佳答案

当你的脚本到达这部分时...

        pw.document.onload = function() {
alert("wow");
}
document.write("1");
pw.onload = function() {
alert("wow2");
}
document.write("2");
setTimeout(function(){
alert("wow3");
alert(pw.document.title);
}, 3000);
document.write("3");

...甚至可以设置事件,但您可以使用 document.write() 丢失文档内容。所以一切都失去了。因此,您可以看到 alert("error;");,但看不到代码的其他 alert()。您应该使用console.log()来调试这些值。只需更改:

document.write("1");

到...

console.log("1");

或者如果您确实想将值打印到文档中...

document.body.innerHTML = "1";

以及其他事件。

关于javascript - onload 函数和 setTimeout 不起作用(更新),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21407012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com