当使用window.open将数据从父级传递到子级时,为什么我会得到'无法读取属性'元素'的未定
When passing data from parent to child with window.open, why do I get 'Cannot read property 'elements' of undefined'?
请耐心听我说,我是Javascript的新手。
这是我的父脚本:
var title = document.title;
var url = window.location.href;
var popForm;
function get_elements() {
formObject = popForm.document.forms["link_form"];
formObject.elements["id_title"].value = title;
formObject.elements["id_url"].value = url;
}
function bookmark() {
popForm = window.open("form.html","aWindow","height=500,width=400");
popForm.window.onload=get_elements()
}
我的孩子只是看起来像这样:
Title:</br>
<input id="id_title" type="text" name="title" maxlength="50" />
</p>
Description:</br>
<textarea id="id_descrip" rows="10" cols="40" name="descrip"></textarea>
</p>
Url: <input id="id_url" type="text" name="url" maxlength="100" />
</p>
<input type="submit" value="Submit" />
我正在尝试创建一个小的"共享"书签,但无法将数据从父文档传递到弹出窗口的元素。Chrome控制台中的错误为Uncaught TypeError: Cannot read property 'elements' of undefined
我错过了什么?!
popForm.window.onload=get_elements();
^这是在执行get_elements,而不是将其分配给onload事件。
popForm.window.onload=get_elements;
^这就是您将函数分配给onload处理程序的方式,但这是您在文档头中要做的事情,而不是您试图做的事情
popForm = window.open("form.html","aWindow","height=500,width=400");
popForm.window.onload = get_elements;
^在这个代码中,您有一个竞赛条件。在某些情况下,popForm.window
将在执行第二行之前由第一行加载。onload事件只会激发一次,所以如果在它激发之前不分配处理程序,第二行就没用了。在其他情况下,当第2行执行时,popForm.window
甚至还不存在,因此无法将函数分配给onload
事件处理程序。
如果您可以控制子窗口中的内容,则处理这种情况的正常方法是将以下代码放入子窗口中:
formObject = document.forms["link_form"];
formObject.elements["id_title"].value = window.opener.title;
formObject.elements["id_url"].value = window.opener.url;
如果您无法控制子窗口的内容,则需要等待iframe中的文档完全加载。除了不断检查之外,没有办法从父母那里知道这一点。使用如下代码。
popForm = window.open("form.html","aWindow","height=500,width=400");
function waitForChild() {
if (! popForm.window ) setTimeout(waitForChild, 1000);
else get_elements();
}
waitForChild();
传递函数意味着不调用它:
popForm.window.onload = get_elements; // no parens
目前您正在调用函数并分配返回值(undefined
)。CCD_ 6此时尚未加载,因此CCD_。
相关文章:
- 如何在不使用任何 html 输入/搜索元素的情况下读取本地客户端文本文件
- 如何在jquery中读取Section中的最后一个元素
- 我得到未捕获的类型错误:无法读取属性'选项'即使定义了元素id,也为null
- 角度模态实例可以't读取DOM元素
- 如何根据我正在读取的节点的元素名称创建元素
- 如何从函数中读取元素值
- 立即读取元素'CSS更改后的视觉属性
- Ajax删除所有子元素并读取更新后的值
- 从指定的字符串中读取数据以创建选择元素
- AngularJS - 如何在 iframe 元素更改时读取 SRC 属性
- 收到错误消息:“未捕获的类型错误:无法读取 null 的属性'焦点'”时尝试调用 focus() 到元素
- 元素 JavaScript 的读取宽度
- jquery 中的元素无法读取 css 文件
- 从远程服务读取 json 数据并打印特定元素
- 按 ID 读取元素
- 如何在 jQuery 中读取 xml 文件内容并在 html 元素中显示
- SimpleSaveWriteStore in dojo - 如何读取元素
- 不读取 while 循环中表单元素第一次迭代 ASP.NET
- 读取视频中的视频元素/属性的正确方法是什么.js
- 如何在数组的元素之间插入空格,该数组作为 HTML 表单的输入读取