window.opener различает кнопку и тип ввода = кнопка

#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. Спасибо, большое спасибо. <тип кнопки=»кнопка» …> кажется смешным, но это работает. Также спасибо за пояснения об обработчиках