Автор Тема: совпадение имен  (Прочитано 7914 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн teq

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 8
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
совпадение имен
« : 09 Апреля 2006, 14:08:43 »
В процессе отправки формы мне нужно менять адрес. Что я делаю соотв в скрипте при помощи document.forms[0].action = "new url";
но в тексте есть и , которую необходимо сохранить. При наличии этой надписи обращение к action формы воспринимается на обращение к input action.

общий вид:


...


...

что сделать, чтобы они не конфликтовали?
или возможно, как по-другому изменять адрес отправки формы?

Оффлайн for_i_0

  • $15 per hour
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 555
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.php.net/manual/en
совпадение имен
« Ответ #1 : 09 Апреля 2006, 18:43:36 »
изменить значение атрибута name в hidden.
[off]Безработный[/off]

Оффлайн teq

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 8
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
совпадение имен
« Ответ #2 : 09 Апреля 2006, 18:52:03 »
хехе )) ну этт-то понятно..только вот при изменение имени этого атрибута скрипт php (чужой, шифрованный, страшный) не хочет все это кушать. ((

Оффлайн html_coder

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 427
  • +0/-0
  • 0
    • Просмотр профиля
совпадение имен
« Ответ #3 : 10 Апреля 2006, 10:48:01 »
Возможно, то, что я сейчас предложу это изврат, но это рабочий вариант и если ты не можешь менять тот зашифрованный PHP скрипт, то он вполне тебе подойдёт, да и вообщем вполне нормальный способ.

Я сам часто сталкивался с такой проблемой, лучше конечно стараться не называть переменные внутри формы, так чтобы они совпадали с её свойствами или методами


<script language="JavaScript" type="text/javascript">
	
function 
check()
	
{
	
	
//Объект - форма
	
	
HTMLFormElelment document.forms[0];
	
	
	
	
	
	
	


	
	
//Объект input
	
	
firstInput HTMLFormElelment.childNodes[1];

	
	
//Просто устанавливаем атрибут name у этого input в пустую строку
	
	
firstInput.setAttribute(\'name\', \'\');
	
	

	
	
HTMLFormElelment.action = \'any\';
	
	
	

	
	
//Меняем обратно
	
	
firstInput.setAttribute(\'name\', \'action\');
	
	

	
	
//Submit формы
	
	
HTMLFormElelment.submit();
	
}
</script>

<form action="<?=$_SERVER[\'PHP_SELF\']?>">
<input name="action" type="hidden" value="Add">
<input name="subm_btn" type="button" value="submit"onclick="check()">
<form>

Оффлайн Shade_Wolfen

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 11
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
совпадение имен
« Ответ #4 : 10 Апреля 2006, 17:24:03 »
Проще просто форме добавить id и этому id изменить атребут action.

Оффлайн html_coder

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 427
  • +0/-0
  • 0
    • Просмотр профиля
совпадение имен
« Ответ #5 : 10 Апреля 2006, 18:01:04 »
Shade_Wolfen если ты имеешь что надо у формы добавить атрибут id

т.е. id="my_form", а потом получить при помощи document.getElementById(\'my_form\') саму форму а следом и её атрибут, то поверь мне что это не изменит данной ситуации и работать всё равно не будет, можешь попробовать....

Оффлайн Shade_Wolfen

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 11
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
совпадение имен
« Ответ #6 : 10 Апреля 2006, 18:18:45 »
Точно, даже через getAttribute() выдает объект, а не значение. Интересно проявляется он только в IE или нет.

Оффлайн teq

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 8
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
совпадение имен
« Ответ #7 : 10 Апреля 2006, 19:39:08 »
html_coder
слу, спасиб. еще такой вопрос: это с применением XML? У меня он спотыкается по неизвестной пока причине (не исключая версию кривых рук)) ) на строке с заданием пустой строки в name..
может (если XML) еще какую-то запись вверх добавить надо? не приходилось с ним работать.(
в чем может быть причина?

Оффлайн html_coder

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 427
  • +0/-0
  • 0
    • Просмотр профиля
совпадение имен
« Ответ #8 : 11 Апреля 2006, 10:07:50 »
Это не XML, это DOM + JavaScript. Я его проверял только в FireFox, а потом посмотрел а IE, действительно спотыкается, сегодня попробую понять почему, вообще осёл это отдельная песня )))) О результатах сообщу...

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
совпадение имен
« Ответ #9 : 11 Апреля 2006, 10:20:32 »
А почему бы не пройтись циклом по forms[0].children?

Оффлайн Shade_Wolfen

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 11
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
совпадение имен
« Ответ #10 : 11 Апреля 2006, 13:09:53 »
Ты тогда пройдешься по вложенным элементам, а нужно изменить как раз корневой - форму, но как ни крути, он в упор не хочет видеть свойство, если есть элемент с таким-же именем.

Оффлайн html_coder

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 427
  • +0/-0
  • 0
    • Просмотр профиля
совпадение имен
« Ответ #11 : 11 Апреля 2006, 14:40:57 »
Ну вот я покрутил вроде как и накрутил )))


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<
html>
<
head>
	
<
title>Untitled</title>
	
<
script language="JavaScript" type="text/javascript">
	
function 
check()
	
{
	
	
//Объект - форма
	
	
HTMLFormElement document.forms[0];

	
	
/*
	
	
* Объект input для IE, если надо для FF это будет HTMLFormElement.childNodes[1]
	
	
* По всей видимости это происходит из-за того, что они по-разному строят дерево документов
	
	
* Т.е. для того,  чтобы достичь совместимости я думаю лучше всего убрать перенос строки после тега <form ...>
	
	
*/
	
	
firstInput HTMLFormElement.childNodes[0];

	
	
//Удаляем объект <input name="action" type="hidden" value="Add"> из дерева документа вообще!
	
	
HTMLFormElement.removeChild(firstInput);
	
	

	
	
//Меняем action у формы
	
	
HTMLFormElement.action = \'any.php\';
	
	
	
	

	
	
//А вот здесь вновь его восстанавливаем его обратно, чтобы он был после сабмита
	
	
firstInput = document.createElement(\'input\');
	
	

	
	
//Устаналиваем атрибуты обратно в старые значения
	
	
firstInput.setAttribute(\'name\', \'action\');
	
	
firstInput.setAttribute(\'value\', \'Add\');
	
	
firstInput.setAttribute(\'type\', \'hidden\');
	
	

	
	
//Добавляем созданный элемент к форме
	
	
HTMLFormElement.appendChild(firstInput);

	
	
//Submit формы
	
	
HTMLFormElement.submit();
	
}
</script>
</head>
<body>
<form action="<?=$_SERVER[\'PHP_SELF\']?>">
<input name="action" type="hidden" value="Add">
<input name="subm_btn" type="button" value="submit"onclick="check()">
</form>
</body>
</html>

Оффлайн html_coder

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 427
  • +0/-0
  • 0
    • Просмотр профиля
совпадение имен
« Ответ #12 : 11 Апреля 2006, 15:41:47 »
А вот родился просто супер короткий вариант функции check, работающий в IE и FF (подсказали соседи :D)

   function check ()
   {
      var HTMLFormElement = document.forms[0];
      form_action_attribute = HTMLFormElement.getAttributeNode(\'action\');
      form_action_attribute.value = \'any.php\';
      HTMLFormElement.submit();
   }

Оффлайн teq

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 8
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
совпадение имен
« Ответ #13 : 13 Апреля 2006, 13:33:55 »
))) спасибо большое, все работает отлично
IE, FF, Opera
))

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28