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

Салют. Я доказал с Firefox IE.

Если вы вызываете paginaH1.html (функция openSon) из кнопки (window.opener не работает).

если звонить с ввода тип=кнопка работает.

Если вы нажмете кнопку, она не сработает (a0-ObjectWindow, a1-Undefined).

если вы нажмете input type='button' work(a0-ObjectWindow,a1-ObjectHTMLElement).

Это открытие страницы:

<!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>

Благодарю.


person Domingo SC    schedule 11.10.2016    source источник


Ответы (1)


по умолчанию type из button элементов равно submit. То есть <button>x</button> точно такое же, как <button type="submit">x</button>. Когда у вас есть button в form (что у вас есть), щелчок по нему отправляет форму после запуска обработчиков кликов. form элементов, у которых нет action по умолчанию для отправки по URL-адресу страницы, который уничтожает текущую страницу и заменяет ее новой копией (которую легко пропустить).

Поэтому, когда вы нажимаете input, он запускает обработчик кликов, запускает процесс открытия всплывающего окна и больше ничего не делает. Исходное окно, документ и элементы открывающей страницы все еще существуют. Дочернее окно может получить доступ к этим элементам.

Но когда вы щелкаете button, он запускает свой обработчик кликов, запускает процесс открытия всплывающего окна, а затем отправляет форму, уничтожая окно, документ и элементы. Дочернее окно не может получить доступ к элементам, они больше не существуют. (Вместо этого существуют новые элементы, но дочерний элемент не имеет к ним доступа.)

Если вы хотите, чтобы button вел себя так же, как input, добавьте к нему type="button". (И да, фраза <button type="button" ...> действительно кажется смешной. :-))

person T.J. Crowder    schedule 11.10.2016
comment
Большое спасибо. ‹button type=button ...› кажется смешным, но это работает. Также спасибо за пояснения по поводу обработчиков - person Domingo SC; 11.10.2016