Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Назначение onlcick элементу родительского окна (https://javascript.ru/forum/events/58472-naznachenie-onlcick-ehlementu-roditelskogo-okna.html)

ToD 23.09.2015 22:46

Назначение onlcick элементу родительского окна
 
Доброго времени суток.
Из дочернего окна создаю новую ячейку родительскому окну td.
Одновременно пытаюсь присвоить ей событие на отравку сабмит.

newel.onclick = function() {document.forms.form_save_ent.submit();};


Упорно работать не хочет.
Помогите советом. Спасибо

ksa 24.09.2015 11:09

Цитата:

Сообщение от ToD
Помогите советом

Совет первый - сделай полный тестовый пример.

ToD 24.09.2015 13:36

var parenttbl = window.opener.document.getElementById(\"row_panel\");
var newel = window.opener.document.createElement('td');
var elementid = document.getElementsByTagName(\"td\").length
newel.setAttribute('id',elementid);
newel.onclick = function() {document.forms.form_save_ent.submit();};
parenttbl.appendChild(newel);

Здесь создаю ячейку td в таблице и одновременно прикрепляю onclick.
В результате ошибка "Uncaught TypeError: Cannot read property 'submit' of undefined"

ksa 24.09.2015 15:15

ToD, у тебя не верное представление о создании тестовых примеров... :(
Оных тут валом! Просто посмотри как это делают другие. ;)

ksa 24.09.2015 15:43

ToD, вот работающий пример...

tmp.csp
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<!--
<script src='http://code.jquery.com/jquery-latest.js'></script>
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
function test(){
	window.open('tmp1.csp');
};
</script>
</head>
<body>
<div id='test'></div>
<button onclick='test();'>Go</button>
</body>
</html>

tmp1.csp
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<!--
<script src='http://code.jquery.com/jquery-latest.js'></script>
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
var ow = window.opener.document
var op = ow.getElementById('test');
var o = ow.createElement('button');
o.innerHTML='Test';
o.onclick = function() {alert('Ok');};
op.appendChild(o);
alert('End')
</script>
</head>
<body>
</body>
</html>

Но работать будет только на неком сервере. Если просто файлы скопировать и запустить - работать не будет. :nono:

ToD 24.09.2015 23:50

Ksa, спасибо за разъяснения. Выкладываю часть кода.

exec.php(родительское)
.....
function DoSubmit(){
var w = 450;
var h = 200;
var leftvar = (screen.width-w)/2;
var topvar = (screen.height-h)/2*0.5;
var new_window = window.open(\"\", \"kv2\", \"resizable=no, location=no, width=\"+w+\",height=\"+h+\",left=\"+leftvar+\",top=\"+topvar+\"\");
hid_val = document.getElementById(\"field_entered_surname\").value;
document.getElementById(\"form_surname_pac\").value = hid_val;
document.forms.form_surname_pac_search.submit();
}
.....
</tr>
<tr align = \"center\" height = \"5%\" id=\"row_panel\">
<td class = \"close\" id = \"td_clsp\" onclick = \"window.close();\" colspan = \"2\">
Закрыть
</td>
</tr>
<form action = \"search_pac.php\" method = \"POST\"  name = \"form_surname_pac_search\" target = \"kv2\">
<input type = \"hidden\" id = \"form_surname_pac\" name = \"surname_pac\" value = \"\">
</form>
</table>
<form method = \"POST\" name = \"form_save_ent\" id = \"form_id\">
<input type = \"hidden\" id = \"selected_id_pac\" name = \"id_pac\" value = \"\">
</form>


search_pac.php (дочернее)
....
var parenttbl = window.opener.document.getElementById(\"row_panel\");
var newel = window.opener.document.createElement('td');
var elementid = document.getElementsByTagName(\"td\").length
newel.setAttribute('id',elementid);
newel.innerHTML = \"Запись\";
newel.onclick = function() {document.forms.form_save_ent.submit();};
parenttbl.appendChild(newel);
window.close();
....

ToD 25.09.2015 00:15

Спасибо всем за помощь. Решил самостоятельно более простым путем.
Изначально создал ячейку таблицы, назначил ей свойство style = \"display: none;\" . Там прописал и onclick и назначил ID.
Потом в дочернем окне просто убрал это свойство через DOM.


Часовой пояс GMT +3, время: 13:25.