Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.03.2011, 22:31
Новичок на форуме
Отправить личное сообщение для Oparin Посмотреть профиль Найти все сообщения от Oparin
 
Регистрация: 29.03.2011
Сообщений: 4

Не корректно работает 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

Друзья, помогите разобраться, что я напутал?
Ответить с цитированием
  #2 (permalink)  
Старый 29.03.2011, 22:55
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

попробуй добавлять рандомное число в action формы

тогда отправляется.



function Open_W(U){

	document.forms.MyOpenForm.action=U*!*+'/?'+Math.random();*/!*
	document.forms.MyOpenForm.submit();
}
Ответить с цитированием
  #3 (permalink)  
Старый 30.03.2011, 00:34
Новичок на форуме
Отправить личное сообщение для Oparin Посмотреть профиль Найти все сообщения от Oparin
 
Регистрация: 29.03.2011
Сообщений: 4

Да, такой вариант я пробовал, действительно работает.
Но как-то кривовато и не универсально получается. Может быть все-таки есть ошибка в моем коде и можно это же действие сделать "по умному"?
Ответить с цитированием
  #4 (permalink)  
Старый 30.03.2011, 08:41
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

нажмите на кнопку с гуглом ( первый раз)

далее, через "просмотр кода элемента" отредактируйте html-код формы

добавьте input type="submit" value="go" и input type="hidden" value="q"

при нажатии на go в хроме тоже не отправляется

т.е. ошибка не в скрипте
Ответить с цитированием
  #5 (permalink)  
Старый 30.03.2011, 10:08
Аспирант
Отправить личное сообщение для goldserg Посмотреть профиль Найти все сообщения от goldserg
 
Регистрация: 08.02.2010
Сообщений: 37

Есть подозрение что это связано с "умностью" браузеров и в таких случаях кроме как хак, вариантов нет
Ответить с цитированием
  #6 (permalink)  
Старый 30.03.2011, 11:51
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,589

скорее всего кешируется. и такая фигня будет в любом где кеш разрешен
Ответить с цитированием
  #7 (permalink)  
Старый 30.03.2011, 12:23
Аспирант
Отправить личное сообщение для goldserg Посмотреть профиль Найти все сообщения от goldserg
 
Регистрация: 08.02.2010
Сообщений: 37

И такого рода хак new Date().getTime()+Math.random() - это насильный сброс кеша.
Ответить с цитированием
  #8 (permalink)  
Старый 30.03.2011, 13:43
Новичок на форуме
Отправить личное сообщение для Oparin Посмотреть профиль Найти все сообщения от Oparin
 
Регистрация: 29.03.2011
Сообщений: 4

Функция открытия окна методом 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);
}
Ответить с цитированием
  #9 (permalink)  
Старый 30.03.2011, 16:20
Новичок на форуме
Отправить личное сообщение для Oparin Посмотреть профиль Найти все сообщения от Oparin
 
Регистрация: 29.03.2011
Сообщений: 4

Не факт, что тут именно кэширование виновато. БЕЗ фреймов все работает как надо.
Поэтому, возможно сама функция после первого прохода ищется где-то в другом месте, как думаете?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
submit через ссылку <a> Phoenix Общие вопросы Javascript 47 21.08.2015 17:22
eMail через JS konstantinopol Общие вопросы Javascript 15 12.01.2015 10:06
скрипт работает в IE через раз jsVAN Internet Explorer 2 10.03.2011 03:27
JS работает в Опере, Хроме и Сафари, и не работает в IE & Mozilla Aliena Javascript под браузер 5 04.12.2010 08:15
Почему это работает? (инклуд JS в JS) Василий Б. Общие вопросы Javascript 4 11.06.2010 12:41