#javascript #window.opener
#javascript #window.opener
Вопрос:
Приветствую. Я доказал, что с Firefox IE.
Если вы вызываете paginaH1.html (функция openSon) с помощью кнопки (window.opener не работает).
если вы вызываете из input type = кнопка работает.
Если нажать кнопку, не сработает (a0-ObjectWindow, a1-не определено).
если вы нажмете тип ввода = ‘кнопка’ (a0-ObjectWindow,a1-objectthtmlelement).
Это открыватель страницы:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>prueba-Father</title>
<script type="text/javascript">
function openSon() {
window.datoPField = document.frmName.campoPadre;
alert(window.datoPField ' ahora abro hijo');
a=window.open('paginaH1.html');
}
</script>
</head>
<body>
<form name="frmName">
<h1 id="text">Comunicacion entre dos paginas con Javascript.</h1>
<input type="text" name="campoPadre" id="campoPadre" value="delPadre" >
<input type="button" onClick="openSon()" value="input-button">
<button onClick="openSon()">button</button>
<button onClick="window.datoPField = document.getElementById('campoPadre'); a=window.open('paginaH1.html');">bt getElement</button>
</form>
</body>
</html>
Теперь pagninaH1.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Son page</title>
<script type="text/javascript">
function iniciar() {
alert(0);
alert("a0-" window.opener);
alert("a1-" window.opener.datoPField);
alert("b0-" window.opener.frmName.campoPadre);
alert("c0-" window.opener.datoPField.value);
this.datoField = opener.datoPField;
alert("d0-" this.datoField);
}
</script>
</head>
<body ONLOAD="iniciar()">
<h1 id="text">esta es la pagina hijo </h1>
<button onclick="this.window.close();">Cerrar</button>
</body>
</html>
Спасибо.
Ответ №1:
По умолчанию type
button
элементы submit
. То есть, <button>x</button>
это точно так же, как <button type="submit">x</button>
. Когда у вас есть a button
в a form
(что вы и делаете), щелчок по нему отправляет форму после запуска ее обработчиков кликов. form
элементы, которые action
по умолчанию не отправляются на URL страницы, что уничтожает текущую страницу и заменяет ее новой копией (которую легко пропустить).
Поэтому, когда вы нажимаете input
, он запускает свой обработчик кликов, запускает процесс открытия всплывающего окна и больше ничего не делает. Исходное окно, документ и элементы открывающей страницы все еще существуют. Дочернее окно может получить доступ к этим элементам.
Но когда вы нажимаете кнопку button
, он запускает свой обработчик щелчка, запускает процесс открытия всплывающего окна, а затем отправляет форму, уничтожая окно, документ и элементы. Дочернее окно не может получить доступ к элементам, они больше не существуют. (Вместо этого существуют новые элементы, но у дочернего элемента нет к ним доступа.)
Если вы хотите button
, чтобы он вел себя так же, как и the input
, добавьте type="button"
к нему. (И да, высказывание <button type="button" ...>
действительно кажется нелепым. 🙂 )
Комментарии:
1. Спасибо, большое спасибо. <тип кнопки=»кнопка» …> кажется смешным, но это работает. Также спасибо за пояснения об обработчиках