2010-04-10 1 views
0

У меня есть HTML-страница с простой формой.Как открыть новое окно браузера И запустить Javascript через одно взаимодействие пользователя?

Когда пользователь нажимает кнопку «отправить», я хотел бы открыть новое окно с обработанными результатами формы, а также иметь перенаправление исходной страницы в другое место.

Если я использую ссылку с target = "_ blank", я могу открыть окно результатов, но не перенаправить исходную страницу. Если я использую Javascript, чтобы попытаться открыть новое окно, а затем перенаправить текущую страницу, открытие нового окна будет заблокировано (по крайней мере, моим блокировщиком всплывающих окон по умолчанию Firefox).

Есть ли способ получить как новое окно, так и запустить Javascript на исходной странице?

Спасибо!

ответ

1

Во-первых, вам необходимо установить «цель» формы, которую вы отправляете на «_blank», затем используйте событие onsubmit формы для изменения текущего местоположения следующим образом:

<form action="formResults.html" method="post" onsubmit="document.location.href='redirectPage.html'" name="MyForm" target="_blank" id="MyForm"> 
    <input type="submit" name="button" id="button" value="Submit" /> 
    <input type="text" name="textfield" id="textfield" /> 
</form> 
+0

, это выглядит как решение, за исключением того, что, поскольку у меня есть простая проверка данных функции в onsubmit, эта конструкция не будет запускать проверку перед открытием нового окна. любая идея, как я могу сделать некоторые основные проверки JS в поле перед тем, как появится новое окно? –

+0

Единственный способ сделать это (валидация, результат всплывающего окна и текущее изменение местоположения) для ВСЕХ браузеров (IE легко, проблемы с Firefox возникают): В событии onload для тела окна формы формы, т.е. formResults.html, call window .opener.document.location.href = 'redirectPage.html' Это приведет к тому, что страница, из которой первоначально была отправлена ​​форма, изменила местоположение на 'redirectPage.html' – Jimbo

-1

и может иметь функцию на родительской странице, как

function gosomewhere() 
{ 
location.href="somewhere.html"; 
} 

и во всплывающем окне используйте эту функцию OnLoad случае вызова тела этой функции

function parentRedirect() 
{ 
window.opener.gosomewhere(); 
} 
+0

вы имеете в виду прямую функцию кнопки отправки будет только открыть новое окно? если да, то как бы форма была отправлена? Мне понадобится вызванная функция, чтобы отправить форму, не так ли? –

+0

Не нужно вставлять функцию для формы. Просто разместите функцию gosomewhere на странице, где находится форма. U будет вызывать эту функцию со всплывающей страницы. просто поместите функцию parentRedirect на всплывающую страницу и вызовите ее внутри тега body с событием onLoad. GOT IT – nik

+0

Я не уверен, что вы его получили: как бы форма на исходной странице была отправлена ​​в соответствии с вашим предложением? –

0

У меня была аналогичная проблема с PDF, который был сгенерирован на лету из формы. Форма была сначала подтверждена, а затем открыта pdf на лету в новом окне. поскольку этот PDf может быть открыт в окне, он не будет вызывать код JavaScript для родителя.

Мое решение состояло в том, чтобы разместить setTimeout('gosomewhere()', 100); как раз перед возвратом true; в скрипте проверки.

Время ожидания 100 миллисекунд должно быть достаточным для того, чтобы браузер открыл новое окно.

{ 
    setTimeout('gosomewhere()', 100); 
    return true; 
} 

Надеюсь, это будет полезно для всех, кто сталкивается с такими проблемами.

0

Вы должны быть в состоянии использовать что-то вдоль линий

<script type="text/javascript"> 
function onSubmit() { 
    if(valid()) { 
     setTimeout(function() { document.location.href = 'blah' }, 100); 
     return true; 
    } 
    return false 
} 
</script> 

<form onsubmit="return onSubmit();" target="_blank"> 
...