Несколько window.open с использованием JavaScript в переполнении стека

Я пытаюсь открыть несколько новых окон (вкладок браузера) из php, используя javascript, но не знаю, почему он всегда будет открывать только одно окно, а также не нашел решения этой проблемы. Вот мой код

<?php

openWindow("name1","id1");
openWindow("name2","id2");

function openWindow($name,$id)
{
echo "name = $name and Id = $id";

echo "
<form id=$name method='post' action='studentDetails.php' target='TheWindow'>
<input type='hidden' name='name' value=$name />
<input type='hidden' name='id' value=$id />
</form>

<script type='text/javascript'>
window.open('', 'TheWindow');
document.getElementById(<?php echo $name;?>).submit();
</script>

";
}
?>

2

Решение

Имейте в виду следующее:

  1. Ваши 2 вызова функции openWindow () создадут 2 идентичные формы вместе с блоками javascript под ней.
  2. Поскольку вы жестко закодировали идентификатор формы как «TheForm», это недопустимо, поскольку идентификатор элемента должен быть уникальным в DOM. Следовательно, document.getElementById (‘TheForm’) является неоднозначным
  3. Вам лучше использовать JavaScript для открытия URL-адресов, например с помощью window.open вместо вызовов функций PHP

Пример:
Поскольку детали требований неизвестны, трудно предложить правильное решение, даже если ваш исходный код работает. Я бы не рекомендовал пытаться открывать несколько новых вкладок программно. Одной из причин является удобство использования / пользовательский опыт. Другая причина заключается в том, что не существует стандартного поддерживаемого метода, позволяющего работать с различными браузерами и настройками браузера. Существует рекомендация css3 для открытия в новой вкладке.

2 решения, которые вы можете рассмотреть:
а) Открытие нескольких страниц в виде всплывающих окон
б) Открытие одной страницы с несколькими записями для каждого учащегося
В зависимости от того, что вы после, вам нужно решить. Для большинства случаев подойдет вариант будет.

Образец варианта (а):

test.php

<html>
<head>
</head>
<body>
<form id='studentform' method='post' action='studentDetails.php' target="_blank">
<input type='hidden' name='name' id="name" value="" />
<input type='hidden' name='id' id="id" value="" />
</form>

<script type='text/javascript'>
function openWindows(){
window.open("http://localhost/test/studentDetails/studentDetails.php?name=john&id=1", "", "width=600, height=300");
window.open("http://localhost/test/studentDetails/studentDetails.php?name=mary&id=2", "", "width=600, height=300");
}

openWindows();

</script>

</body>
</html>

studentDetails.php

<?php
function getParam($name,$method){
if($method=="POST")
return isset($_POST[$name])?$_POST[$name]:"";
else
return isset($_GET[$name])?$_GET[$name]:"";
}
$name = getParam("name", "GET");
$id = getParam("id", "GET");
if($name && $id)
echo("name = $name and Id = $id");
else
echo("Invalid student info");
?>
1

Другие решения

А вот и рабочий код

<?php
openWindow("name1","Id1");
openWindow("name2","Id2");function openWindow($name,$studentId)
{
echo "
<form id='$name' method='post' action='studentDetails.php' target='_blank'>
<input type='hidden' name='name' value=$name />
<input type='hidden' name='studentId' value=$studentId />
</form>

<script type='text/javascript'>
document.getElementById('$name').submit();
</script>

";
}
?>
1

если вы укажете еще один вызов window.open() метод в вашем скрипте, вы должны заставить его работать:

<script type='text/javascript'>
window.open('', 'TheWindow');
window.open();
document.getElementById('TheForm').submit();
</script>

Затем вы можете указать нужные параметры: window.open(url, name, specs, replace)

Я надеюсь, что это поможет.

0
По вопросам рекламы [email protected]