Не корректно работает 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, время: 02:20. |