JS无法将值传递给父的文本输入元素[怪异的行为]

时间:2013-09-21 14:55:11

标签: javascript html

popuptest.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title></title>
</head>
<body>
<form action="#" id="formid" >
    <input type="text" id="textinput" value="empty value" />
    <input type="hidden" id="hiddeninput" value="empty value" />
    <button type="button" onclick="window.open('popup.xhtml', 'Select Reference','status,width=400,height=400');" >Open PopUp</button>
</form>
</body>
</html>

popup.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title></title>
</head>
<body>
<button onclick="
    opener.document.getElementById('textinput').value = 'text value from child pop up !';
    opener.document.getElementById('hiddeninput').value = 'hidden value from child pop up !';
    window.close();
">Put values to parent</button>
</body>
</html>

打开popuptext.xhtml - &gt;按开启弹出按钮 - &gt;按将值放到父级 我在父窗口中观察到的内容:

seems that value was passed to parent text input 似乎该值已传递给父文本输入

但另一方面,我在Chrome调试中看到的内容(F12):

omg! text input is empty! and value was passed to hidden input(as expected)

OMG!文字输入为空!和值传递给隐藏输入(如预期的那样)

Chrome版本:29.0.1547.76 m Firefox 24.0上也一样 这种行为有什么解释吗?这是一个错误吗? 我需要将值传递给文本输入,然后提交表单,但在这种情况下,表单不包含我的值。

1 个答案:

答案 0 :(得分:2)

显示的值(属性)和dom(属性)中的值是两回事。

DOM中设置的属性类似于input元素的默认值。如果属性 value中没有存储任何值,则会显示其中一个DOM属性。 如果值存储在属性 value中,则会显示此值而不是存储在属性中的值,但正如您观察到的那样,dom属性保持不变。

如果您将null存储在属性value中,则会再次显示默认值。

所以你观察到的行为是正确的。

Here对另一个问题的回答,该问题显示属性属性之间差异的一个影响