Не корректно работает Submit() через JS
Приветствую.
Есть простенький скрипт, открывающий окно и передающий туда данные методом POST
function Open_W(U){
document.forms.MyOpenForm.action=U;
document.forms.MyOpenForm.submit();
}
К коду прилагается форма: <form method=post name=MyOpenForm id=MyOpenForm target=_blank> </form> и собственно кнопка, вызывающая данную функцию:
<input type=button value="google" onClick="Open_W('http://www.google.ru');" class=bt>
Важно! Страница с этим кодом подгружается во фрейме. Проблема вот в чем: в браузерах Chrome и Safari кнопка срабатывает только один раз, т.е. кликаешь на кнопку, открывается окно, передаются данные все ОК. А если кликать еще раз на кнопку, то вообще ничего не происходит!!! Такая проблема только в указанных браузерах и ТОЛЬКО если страница вложена во фрейм посмотреть пример полностью, можно здесь: http://oparin.ru/test3.html Друзья, помогите разобраться, что я напутал? :cray: |
попробуй добавлять рандомное число в action формы
тогда отправляется.
function Open_W(U){
document.forms.MyOpenForm.action=U*!*+'/?'+Math.random();*/!*
document.forms.MyOpenForm.submit();
}
|
Да, такой вариант я пробовал, действительно работает.
Но как-то кривовато и не универсально получается. Может быть все-таки есть ошибка в моем коде и можно это же действие сделать "по умному"? |
нажмите на кнопку с гуглом ( первый раз)
далее, через "просмотр кода элемента" отредактируйте html-код формы добавьте input type="submit" value="go" и input type="hidden" value="q" при нажатии на go в хроме тоже не отправляется т.е. ошибка не в скрипте |
Есть подозрение что это связано с "умностью" браузеров и в таких случаях кроме как хак, вариантов нет
|
скорее всего кешируется. и такая фигня будет в любом где кеш разрешен
|
И такого рода хак new Date().getTime()+Math.random() - это насильный сброс кеша.
|
Функция открытия окна методом POST.
Жаль, конечно, что приходится извращаться.
Накатал вот такую функцию открытия окна методом POST, может кому-то будет полезна. Правда пока не тестил в работе, может есть баги...
/*
Открытие нового окна и передача в него параметров методом POST
action - адрес
args - передаваемые аргументы, вида "a=111&b=222&c=333&..."
target - '_top', '_blank', или название окна. Если не указано, то '_blank'
*/
function OpenNewWinPost(action,args,target){
var new_el = function(el,name,value){
m_form_i = document.createElement('input');
m_form_i.setAttribute("type","hidden");
m_form_i.setAttribute("name",name);
m_form_i.setAttribute("value",value);
el.appendChild(m_form_i);
}
if(!target) target = '_blank';
var m_form = document.createElement('form');
// Без добавления а адрес случайной последовательности в Chrome и Safari
// переход по адресу происходит только один, первый раз
var r = new Date().getTime()+Math.random();
// Обработка адресов с # или ?
if(/\?/i.test(action)){
var tmp = new Array();
tmp = action.split('?');
if(/#/i.test(tmp[1])){
var tmp2 = new Array();
tmp2 = tmp[1].split('#');
action=tmp[0]+'?'+tmp2[0]+'&'+r+'#'+tmp2[1];
}else action=tmp[0]+'?'+tmp[1]+'&'+r;
}else{
if(/#/i.test(action)){
var tmp2 = new Array();
tmp2 = action.split('#');
action=tmp2[0]+'?'+r+'#'+tmp2[1];
}else action=action+'?'+r;
}
m_form.setAttribute("action",action);
m_form.setAttribute("method","POST");
m_form.setAttribute("target",target);
// разбор аргументов
var tmp = new Array();
var tmp2 = new Array();
if(args != '') {
tmp = args.split('&'); // разделяем переменные
for(var i=0; i < tmp.length; i++) {
tmp2 = tmp[i].split('='); // массив param будет содержать
new_el(m_form,tmp2[0],tmp2[1]);
}
}
// добавим на страницу
var body = document.getElementsByTagName('body')[0];
body.appendChild(m_form);
// переход
m_form.submit();
// и в конце удалим
body.removeChild(m_form);
}
|
Не факт, что тут именно кэширование виновато. БЕЗ фреймов все работает как надо.
Поэтому, возможно сама функция после первого прохода ищется где-то в другом месте, как думаете? |
| Часовой пояс GMT +3, время: 20:52. |