JS не может передать значение элементу ввода текста родителя [странное поведение]

0

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 → нажать открытую всплывающую кнопку → нажать Поместить значения в родительский Что я наблюдаю в родительском окне:

Изображение 174551 кажется, что значение передано в исходный текст ввода

Но, с другой стороны, то, что я вижу в отладке Chrome (F12):

Изображение 174551

О, мой бог! ввод текста пуст! и значение передавалось на скрытый ввод (как и ожидалось)

Версия Chrome: 29.0.1547.76 м То же самое на Firefox 24.0
Есть ли какие-либо объяснения такого поведения? Это ошибка?
Мне нужно передать значение в текстовый ввод, а затем отправить форму, но в этом случае форма не содержит мое значение.

Теги:

1 ответ

2
Лучший ответ

Отображаемое значение (свойство) и значение в dom (атрибут) - это две разные вещи.

Этот атрибут, установленный в DOM, подобен значению по умолчанию элемента input. Если значение свойства не сохраняется в value свойства, отображается один из атрибутов DOM. Если значение хранится в value свойства, то оно отображается вместо значения, сохраненного в атрибуте, но, как вы заметили, атрибут dom остается нетронутым.

Если вы храните null в value свойства, value умолчанию отображается снова.

Таким образом, ваше наблюдаемое поведение является правильным.

Здесь ответ на другой вопрос, который показывает один эффект разницы между свойством и атрибутом

  • 0
    Я понял, что свойство и атрибут разные. Что мне нужно сделать, чтобы это исправить? Могу ли я сделать что-нибудь? Почему для скрытого типа ввода это работает?
  • 0
    @ user1320115 только что переместил его из комментария в ответ, чтобы добавить больше деталей.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню