Старый 02.01.2008, 20:23   #1   
Форумец
 
Аватар для Userator
 
Сообщений: 123
Регистрация: 09.01.2006
Возраст: 38

Userator вне форума Не в сети
Отцы JavaScript`a, научите

мне нужно узнать как при помощи JavaScript обновить родительское окно после того как дочернее, активное на данный момент окно полностью загрузилось.
Загвоздка у меня возникла в том, что я незнаю как проверить загрузилось ли активное окно или нет!
  Ответить с цитированием
Старый 02.01.2008, 22:17   #2   
Out There
 
Аватар для Part!zan
 
Сообщений: 6,007
Регистрация: 13.12.2004
Возраст: 45

Part!zan вне форума Не в сети
Я, конечно, не отец, но знаю, что у картинок есть свойство complete которое становится истинным, когда картинка загружена. Может и у страницы такое же есть... Кстати, можно попробовать сделать, чтоб дочернее окно само сообщало о том, что оно загрузилось.
  Ответить с цитированием
Старый 02.01.2008, 23:31   #3   
няшечка
 
Аватар для mikе
 
Сообщений: 5,316
Регистрация: 13.06.2003

mikе вне форума Не в сети
есть у объекта боди событие onLoad, есть объект родительский opener (так по-моему)
итого в дочернем окне:
<body onLoad="opener.location.refresh();">

давно с JS не сталкивался, но имхо так как-то
  Ответить с цитированием
Старый 03.01.2008, 08:55   #4   
Форумец
 
Аватар для Userator
 
Сообщений: 123
Регистрация: 09.01.2006
Возраст: 38

Userator вне форума Не в сети
Спасибо, работает.
но возник ещё один вопрос как сие действие проделать при нажатие на кнопку ??
пробовал вот так:
Цитата:
<script language="javascript">
function reParWin(){
opener.window.location.reload();
}
function oncReParWin(){
window.onload = function() { reParWin() }
}
</script>
<html>
<body>
<input name="inpname" type="button" onclick="oncReParWin();"
</body>
</html>
но чтото не прокатывает
  Ответить с цитированием
Старый 03.01.2008, 09:46   #5   
няшечка
 
Аватар для mikе
 
Сообщений: 5,316
Регистрация: 13.06.2003

mikе вне форума Не в сети
Цитата:
Сообщение от Userator
window.onload = function() { reParWin() }
что-то я не уверен, что вот эта конструкция должна работать.
а даже если и будет работать, то только в теории,
ибо страница загрузилась, событие onLoad произошло, и только после этого ты кликаешь на кнопку и добавляешь к сабытию загрузки обработчик.
  Ответить с цитированием
Старый 03.01.2008, 13:35   #6   
Out There
 
Аватар для Part!zan
 
Сообщений: 6,007
Регистрация: 13.12.2004
Возраст: 45

Part!zan вне форума Не в сети
Userator, че-то не совсем понятно, чего ты хочешь... Кнопка должна что делать? Обновлять? Или включать автообновление?
  Ответить с цитированием
Старый 03.01.2008, 20:01   #7   
Форумец
 
Аватар для Userator
 
Сообщений: 123
Регистрация: 09.01.2006
Возраст: 38

Userator вне форума Не в сети
нажав на кнопку нужно подождать до тех пор пока активное окно дозагрузится и потом должно обновиться родительское окно.
  Ответить с цитированием
Старый 03.01.2008, 21:39   #8   
Out There
 
Аватар для Part!zan
 
Сообщений: 6,007
Регистрация: 13.12.2004
Возраст: 45

Part!zan вне форума Не в сети
Userator, эээ. А кнопка-то причем? Вот грузится у нас активное (дочернее) окно. Догрузилось. Сработал онлоад. Родитель обновился. Где кнопка находится?
  Ответить с цитированием
Старый 04.01.2008, 08:26   #9   
Форумец
 
Аватар для Userator
 
Сообщений: 123
Регистрация: 09.01.2006
Возраст: 38

Userator вне форума Не в сети
В активном(дочернем) окне есть кнопка при нажатии на которую отправляется инфа этому же скрипту(в это же дочернее окно), соответственно это активное(дочернее) окшко перезагружается, так вот: после того как я нажал на кнопку дочернего окна и оно(дочернее окно) перезагрузилось нужно обновить родительское окно!
Надеюсь понятно описал...
  Ответить с цитированием
Старый 04.01.2008, 14:23   #10   
Out There
 
Аватар для Part!zan
 
Сообщений: 6,007
Регистрация: 13.12.2004
Возраст: 45

Part!zan вне форума Не в сети
Userator, теперь понятно. А если просто поставить статический обработчик онлоад дочернего окна (как и писал mikе), чтобы родитель обновлялся при любом обновлении дочернего окна?
  Ответить с цитированием
Старый 04.01.2008, 20:22   #11   
Форумец
 
Аватар для Userator
 
Сообщений: 123
Регистрация: 09.01.2006
Возраст: 38

Userator вне форума Не в сети
Цитата:
Сообщение от Part!zan
Userator, теперь понятно. А если просто поставить статический обработчик онлоад дочернего окна (как и писал mikе), чтобы родитель обновлялся при любом обновлении дочернего окна?
Пока что так и сделал, но при этом обновляется родительское окно постоянно при обновлении дочернего, а это не есть гуд...
  Ответить с цитированием
Старый 04.01.2008, 21:13   #12   
Out There
 
Аватар для Part!zan
 
Сообщений: 6,007
Регистрация: 13.12.2004
Возраст: 45

Part!zan вне форума Не в сети
Userator, тогда грузи в дочернее окно после нажатия кнопки другую страничку, в которой есть обработчик онлоад. А по-другому, имхо, никак. Кстати, а зачем такая синхронность?
  Ответить с цитированием
Старый 04.01.2008, 23:29   #13   
Форумец
 
Аватар для Userator
 
Сообщений: 123
Регистрация: 09.01.2006
Возраст: 38

Userator вне форума Не в сети
онлайн магазин пишу, в нем заказанные товары открываются в отдельном окне, и вот когда товары удаляешь из заказа, то чтоб в родительском окне инфа тоже обновлялась, ато будет в заказе 5 позиций, а на галавной будет показывать что их 10, негоже так.
  Ответить с цитированием
Старый 05.01.2008, 04:05   #14   
Out There
 
Аватар для Part!zan
 
Сообщений: 6,007
Регистрация: 13.12.2004
Возраст: 45

Part!zan вне форума Не в сети
Userator, такие вещи, имхо, должны на стороне сервера делаться... Каждое нажатие кнопки перегружает новую страницу, а уж серверу не составит труда прописать в ней, чего надо.
  Ответить с цитированием
Старый 05.01.2008, 11:10   #15   
+79038594250
 
Сообщений: 1,493
Регистрация: 31.01.2005
Возраст: 41

1000w вне форума Не в сети
Цитата:
Сообщение от Userator
онлайн магазин пишу, в нем заказанные товары открываются в отдельном окне, и вот когда товары удаляешь из заказа, то чтоб в родительском окне инфа тоже обновлялась, ато будет в заказе 5 позиций, а на галавной будет показывать что их 10, негоже так.
Цитата:
Сообщение от Userator
нажав на кнопку нужно подождать до тех пор пока активное окно дозагрузится и потом должно обновиться родительское окно.
когда удаляешь товары в ответе сервера в самом конце пропиши строчку:
Цитата:
<script>
if(window.opener)
{ href = window.opener.location.href; window.opener.location.href = href;}</script>
Она перезагрузит родительское окно

п.с. такие способы имеют один недостаток - браузер может брать страницу из кеша - поэтому для устойчивой новой генерации страницы в href следует добавлять какойнибудь случайный параметр.
  Ответить с цитированием
Старый 01.12.2008, 15:04   #16   
Форумец
 
Аватар для Userator
 
Сообщений: 123
Регистрация: 09.01.2006
Возраст: 38

Userator вне форума Не в сети
что я делаю не так ?

Делаю калькулятор стоимости, появилась одна проблемка с JS всю голову сломал никак не могу ошибку выявить.
Ситуация следующая:
Имеется форма на странице в ней несколько элементов input (checkbox и radio) с атрибутом price
Код:
<form name="calc" method="POST" action="/calc.html">
<fieldset>
<legend>Калькулятор стоимости услуг</legend>
<input price="2000" type="radio" name="formCalcPos1" />
<input price="3500" type="radio" name="formCalcPos1" />
<input price="1000" type="checkbox" name="formCalcPos2" />
<input price="1000" type="checkbox" name="formCalcPos3" />
</fieldset>
</form>
<div id="priceCol"></div>
мне нужно:
получить сумму значений атрибутов price всех выбранных (checked="true") элементов input
реализовывал вот так:
Код:
price = 0;
form = document.calc;
for (i=0; i<=form.elements.length; i++) {
if (form.elements[i].nodeName == 'INPUT' && form.elements[i].hasAttribute('price') && form.elements[i].checked) {
price += form.elements[i].attributes.price.value;
}
}
document.getElementById('priceCol').innerHTML = price+'рублей';
Код который идет после цикла for(){} не работает.
  Ответить с цитированием
Старый 02.12.2008, 12:38   #17   
Пессимист
 
Аватар для dn2k4
 
Сообщений: 618
Регистрация: 22.07.2004

dn2k4 вне форума Не в сети
Userator, не взлетит, по многим причинам =)

1) дай форме idшник - "name" может быть неуникальным
2) навскидку должно быть так:
Код:
var sum = 0;
var form = document.getElementById('calcForm');
var group = form.getElementsByTagName('input');
for(i=0;i<group.length;i++) {
    var el=group[i];
    var price = el.attributes.price;
    if (price && el.checked) {
        sum += parseInt(price.value);
    }
}
document.getElementById('priceCol').innerHTML = sum.toString() + ' рублей';
3) Всю эту логику лучше крутить на сервере - ты лишаешь клиента возможности работать с одной корзиной из двух окон браузера.

UPD: и неплохо было бы проверить document.getElementById('priceCol') на существование - если у тебя сначала код выполнится, а потом div в потоке появится
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind