safari/chrome onsubmit=location.reload(true) не работает

Форма на моем веб-сайте не работает должным образом в Safari/Chrome. Когда пользователь отправляет форму, открывается новая вкладка, но я хочу, чтобы исходная страница (страница с формой на ней) перезагружалась. Он работает в IE, Opera и Firefox.

Код:

<form action="/search.php" method="post" onsubmit="location.reload(true)" target="_blank" name="myform">

Я пробовал другие функции javascript, такие как:

  • окно.местоположение.перезагрузить();
  • документ.местоположение.перезагрузить();
  • window.location.replace('http://www.websiteurl.com');
  • window.location.href='http://www.websiteurl.com';
  • И другие вариации этих.

Я подумал, может быть, onsubmit="" не работает, но когда я попробовал onsubmit="alert('test')" , он отлично работал как в Safari, так и в Chrome.

Кроме того, на странице search.php, на которую отправляется форма, если пользователь переходит непосредственно на страницу, используя URL-адрес и не отправляя форму, я установил, что тег body будет загружаться как:

<body onload="window.location.replace("http://www.websiteurl.com")>

который работает во всех браузерах, включая Safari/Chrome.

Что здесь происходит?!?!

Спасибо!


person user1165664    schedule 05.03.2012    source источник
comment
Я не знаю, почему это не работает регулярно, но работает setTimeout хак: jsfiddle.net/xzanQ.   -  person pimvdb    schedule 06.03.2012
comment
Вы хотите, чтобы новая вкладка тоже открывалась?   -  person j08691    schedule 06.03.2012
comment
У меня была аналогичная проблема с перезагрузкой, которая не работала во всех баузерах (хотя и не в контексте перезагрузки формы), и в итоге получилось: window.location=window.location;   -  person Iain Collins    schedule 06.03.2012
comment
Я тоже хочу открыть новую вкладку   -  person user1165664    schedule 06.03.2012
comment
@pimvdb спасибо! setTimeout сработал!   -  person user1165664    schedule 06.03.2012


Ответы (4)


Поскольку это было решение для вас:

Использование setTimeout иногда работает как хакерское решение, откладывая выполнение на очень короткое время: http://jsfiddle.net/xzanQ/< /а>.

person pimvdb    schedule 05.03.2012

Вы можете попробовать:

window.location.href=window.location.href
person Collin Price    schedule 05.03.2012

onsubmit выполняется до публикации формы. Если страница уже выгружается, форма больше не может быть отправлена.

Попробуйте что-то вроде:

var myForm=document.getElementById('myForm');
myForm.addEventListener('submit',function(event){
  event.preventDefault();
  this.submit();//Submit the form BEFORE reloading
  location.reload(true);      
},false);
person user2428118    schedule 28.05.2012

Я только что столкнулся с подобной проблемой и после нескольких часов отладки обнаружил, что ; отсутствовал в моем заявлении onsubmit ..

Изменение:

onsubmit="location.reload(true)"

To:

onsubmit="location.reload(true);"

Исправлено мое сафари на Mac..

person Bas    schedule 09.10.2013