Проблемы с <form>в Safari - только первый щелчок POST для _blank target - PullRequest
4 голосов
/ 01 октября 2010

Я использую PHP для генерации 10 форм на странице, которые прикрепляют изображение в качестве кнопки и скрытые значения POST к цели _blank.В Firefox все работает нормально, все 10 кнопок отправляются и публикуются в новом окне.В Safari, однако, будет работать только первая кнопка, которую я нажму (какую бы кнопку я не выбрал), после этого ни одна из кнопок (форм) не отправит и не отправит сообщение в новое окно (!!! что происходит ??)

Воткод -

$id=getId();
echo "<form name=\"clickthrough$id\" action=\"click_through.php\" method=\"POST\" target=\"_blank\"><input type=\"image\" src=\"images/buttons/buynow_a.gif\" name=\"buynow\"/><input type=\"hidden\" name=\"id\" value=\"".$id."\"/></form>";

Ничего странного здесь - идентификатор фактически является идентификатором песни в моей базе данных, которую я упростил для показа здесь - но я включил его в конец имени формы, просто добавиввызывал проблему.

Итак, подведем итоги. В итоге я получил 10 кнопок «Купить сейчас» на странице - все из которых должны быть опубликованы в PHP-скрипте.Скрипты работают нормально.Однако в сафари, как только я нажал любую кнопку «Купить сейчас», все остальные перестают работать (пока я не обновлю страницу)

почему это так?

- вот окончательный HTML, который генерируетсядля кнопок

<form name="clickthrough1728" action="click_through.php" method="POST" target="_blank"><input type="image" src="images/buttons/buynow_a.gif" name="buynow"/><input type="hidden" name="id" value="1728"/><input type="hidden" name="location" value="UK"/></form>

<form name="clickthrough1724" action="click_through.php" method="POST" target="_blank"><input type="image" src="images/buttons/buynow_a.gif" name="buynow"/><input type="hidden" name="id" value="1724"/><input type="hidden" name="location" value="UK"/></form>

<form name="clickthrough1718" action="click_through.php" method="POST" target="_blank"><input type="image" src="images/buttons/buynow_a.gif" name="buynow"/><input type="hidden" name="id" value="1718"/><input type="hidden" name="location" value="UK"/></form>

....

Я только что попытался скопировать это в новый HTML-файл и тестирование, и происходит то же самое - первый щелчок откроет новое окно, нобез кнопок после этого выложу форму

Ответы [ 4 ]

6 голосов
/ 01 октября 2010

Быстрая проверка с помощью следующего кода работает нормально (Safari 5 на Mac)

for($id = 1; $id < 11; $id++) {
   echo "<form name=\"clickthrough$id\" action=\"sandbox/_TestServer.php\" method=\"POST\" target=\"_blank\">
   <input type=\"image\" src=\"images/buttons/buynow_a.gif\" name=\"buynow\"/>
   <input type=\"hidden\" name=\"id\" value=\"".$id."\"/>
   </form>";
}

, поэтому это может быть ваш $id.Сгенерируйте html и покажите его так, как предложил Пекка

Редактировать Я не могу сказать вам, что не так в safari-windows-land, но я изменил код следующим образом, протестировал его навиртуальная машина (Win XP, Safari5), и она работает:

for($id = 1; $id < 11; $id++) {
   echo "<form name=\"clickthrough$id\" action=\"_TestServer.php?$id\" method=\"post\" target=\"_blank\">
   <input type=\"image\" src=\"add.png\" name=\"buynow\"/>
   <input type=\"hidden\" name=\"id\" value=\"".$id."\"/>
   </form>";
}

каждая форма получила свою «уникальную» цель действия ?$id, и это шло, чтобы выполнить трюк

Править Ссылка и файлы удалены

2 голосов
/ 11 октября 2010

Интересно, связано ли это с типом документа, который вы используете для страницы. Атрибут target устарел и доступен только в XHTML Transitional, XHTML Frameset или HTML 4. Используете ли вы XHTML Strict? Может быть, это вызвало бы эту странность, хотя это похоже на выстрел в темноте ...

2 голосов
/ 01 октября 2010

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

Я бы попробовал присвоить каждой кнопке цель _blank_$i или что-то еще, чтобы у каждой кнопки была уникальная цель.

1 голос
/ 13 октября 2010

Может быть способ сделать это в Javascript.Попробуйте добавить этот код в элемент формы:

<form onsubmit="window.open('about:blank', 'somename', 'width=300,height=300)" target="somename"<!-- Rest of form code here -->> 

Очевидно, что вам потребуется окно с уникальным именем для каждой формы и ссылка на это окно в целевом объекте.Это тоже должно ухудшиться.В случае недоступности Javascript он должен вести себя так же, как ваш код в настоящее время, с проблемами в Safari на ПК.В зависимости от количества пользователей, которые используют этот браузер, это может быть или не быть приемлемым для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...