Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Не удаляется полностью input в Firefox (https://javascript.ru/forum/dom-window/23699-ne-udalyaetsya-polnostyu-input-v-firefox.html)

xcode 02.12.2011 17:05

Не удаляется полностью input в Firefox
 
Привет всем. Помогите разобраться с проблемой. Если создают новое поле в форме, и потом удаляю, то это поле удаляется с экрана, но при обращении к нему в Firefox и GCrome оно существует, в др. браузерах нормально работает. Чтоб было понятнее приведу код:

<html>
<head>


<style type="text/css">

.t_link { text-decoration: underline; color: #777; cursor: pointer; }
</style>

</head>
<body>

<form name="forma1">
тут форма.

<div id="box_input"></div>

</form>

<div>

<span onclick="create_input();" class="t_link">создать поле</span> 
<span class="t_link" onclick="delete_input();">удалить поле</span> 
<span class="t_link" onclick="check_input()">проверить поле</span> 

</div>

<script type="text/javascript">

function create_input()
  {
   var t = "";
   
   t += " поле 1 <input name='pf_1' type='text' value=''> ";
   t += " поле 2 <input name='pf_2' type='text' value=''> ";
   
   document.getElementById("box_input").innerHTML = t;
  }

function delete_input()
  {
   var t = "";
   
   //t += " поле 1 <input name='pf_1' type='text' value=''> ";
   //t += " поле 2 <input name='pf_2' type='text' value=''> ";
   
   document.getElementById("box_input").innerHTML = t;
  }

function check_input()
  {
   var t = "";
   
   obj_pf_1 = document.forms.forma1.pf_1;
   obj_pf_2 = document.forms.forma1.pf_2;
   
   if ( obj_pf_1 )
     {
      alert("v1 = "+obj_pf_1.value);
     }
    else
      {
       alert("v1 нет");
      }
   
   if ( obj_pf_2 )
     {
      alert("v2 = "+obj_pf_2.value);
     }
    else
      {
       alert("v2 нет");
      }
   
  }



</script>

</body>
</html>


если запустить этот код в браузере, нажать на создать поле, появятся два текстовых поля. заполнить их. потом нажать проверить поле, будет отображено содержимое полей. Если нажать удалить поле, то поля удаляться с экрана, но если нажать на проверить поле, то в Firefox и GChrome будет отображено значение этих полей, как будто они и не удалялись. В опере и Ie нормально работает.
Может кто знает как можно удалить полностью эти поля.
Так же удалял эти поля с помощью методов DOM, тоже самое. Не знаю что и делать.

ksa 02.12.2011 23:46

Цитата:

Сообщение от xcode
Может кто знает как можно удалить полностью эти поля.

Тебе поможет
http://www.fpublisher.ru/documentati...s#hremovechild

xcode 03.12.2011 22:35

Если бы так просто.Я удалял с помощью метода removeChild , результат то же самый - с экрана убирается поле, а вот при обращении obj_pf_2 = document.forms.forma1.pf_2; - объект существует и есть значение поля. Такая фишка у Mozilla и Гугл Хром. Похоже на баг, но может как-то это решается.

ksa 04.12.2011 17:43

Цитата:

Сообщение от xcode
Я удалял с помощью метода removeChild , результат то же самый

Не верю... (с) Станиславский :)

<!DOCTYPE html>
<html>
<head>
<!--
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
</style>
<script type="text/javascript">
function Add() {
	if (document.getElementById('i1')) {
		return false;
	};
	document.getElementById('test').innerHTML="<input id='i1' type='text' value='' />";
};
function Delete() {
	var o=document.getElementById('i1');
	if (o) {
		document.getElementById('test').removeChild(o);
	};
};
</script>
</head>
<body>
<div id='test'></div>
<input type='button' value='Add' onclick='Add()' />
<input type='button' value='Delete' onclick='Delete()' />
<input type='button' value='Test' onclick='alert(document.getElementById("i1"))' />
</body>
</html>


Элемента после удаления нет... :no:

xcode 05.12.2011 09:55

Все правильно :) если находить поле по id то работает. А вот если находить поле через коллекцию document.forms.имя_формы.имя_поля то не работает.

<!DOCTYPE html>
<html>
<head>

<style type="text/css">
</style>
<script type="text/javascript">
function Add() {
	if (document.forms.forma1.i1) {
		return false;
	};
	document.getElementById('test').innerHTML="<input name='i1' type='text' value='' />";
};
function Delete() {
	var o=document.forms.forma1.i1;
	if (o) {
		o.parentNode.removeChild(o);
        //document.getElementById('test').removeChild(o);
	};
};
</script>
</head>
<body>
<form name='forma1'>
<div id='test'></div>
<input type='button' value='Add' onclick='Add()' />
<input type='button' value='Delete' onclick='Delete()' />
<input type='button' value='Test' onclick='alert(document.forms.forma1.i1)' />
</form>
</body>
</html>


А мне нужно именно через коллекцию находить поле формы.
ЗЫ. проблему эту я уже обошел, но коряво это все получилось. Хочется все-таки по нормальному сделать :)

ksa 05.12.2011 10:04

Цитата:

Сообщение от xcode
А мне нужно именно через коллекцию находить поле формы.

Никакой разницы не вижу...

<!DOCTYPE html>
<html>
<head>
<!--
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
</style>
<script type="text/javascript">
function Add() {
	if (document.getElementsByName('i1').length>0) {
		return false;
	};
	document.getElementById('test').innerHTML="<input name='i1' type='text' value='' />";
};
function Delete() {
	var o=document.getElementsByName('i1')[0];
	if (o) {
		document.getElementById('test').removeChild(o);
	};
};
</script>
</head>
<body>
<div id='test'></div>
<input type='button' value='Add' onclick='Add()' />
<input type='button' value='Delete' onclick='Delete()' />
<input type='button' value='Test' onclick='alert(document.getElementsByName("i1")[0])' />
</body>
</html>

xcode 05.12.2011 10:42

Так работает! Спасибо :)
А через коллекцию, как я писал выше, только у меня не работает или у вас тоже не работает? Хочется уже знать точно.

ksa 05.12.2011 10:50

Цитата:

Сообщение от xcode
А через коллекцию

Я такой синтаксис не использую давным давно... :)

xcode 05.12.2011 11:46

Цитата:

Сообщение от ksa (Сообщение 140831)
Я такой синтаксис не использую давным давно... :)

Почему? :) Я использую такой синтаксис. Мне кажется очень удобно для проверки данных в полях формы, да и вообще для работы с формой. Может быть несколько форм на странице, и так они спокойно разделяются :)

ksa 05.12.2011 11:50

Цитата:

Сообщение от xcode
Мне кажется очень удобно

У меня обратное мнение... Такой синтаксис применялся на заре создания хтмля...

Цитата:

Сообщение от xcode
Может быть несколько форм на странице, и так они спокойно разделяются

Нужно правильно использовать атрибуты:
- id
- name
- class
И будет тебе счастие... ;)

xcode 05.12.2011 12:11

ну так я и использую атрибут name :) только он не корректно обрабатывается браузерами

devote 05.12.2011 12:21

Цитата:

Сообщение от xcode (Сообщение 140854)
ну так я и использую атрибут name :) только он не корректно обрабатывается браузерами

Потому что в браузерах вырезают старые извращения... Что давно пора, поддерживали лишь для того что сайтов было полно, которые перестали бы работать если бы это вырезали. Сейчас большая часть сайтов использует новые методы, поэтому старые извращения можно смело снести. Юзайте так как показывает ksa

xcode 05.12.2011 13:11

елки палки, все довольно просто :)
нужно писать:
pf = document.forms["имя_формы"].elements["имя_поля"];


так все работает нормально.
Всем спасибо за помощь :)

ksa 05.12.2011 13:16

Цитата:

Сообщение от xcode
нужно писать:
pf = document.forms["имя_формы"].elements["имя_поля"];

И так писать так же не стоит... :D Такому синтаксису тоже "100 лет в обед"...

P.S.
Вот ведь живучий оказался...

xcode 05.12.2011 13:42

Цитата:

Сообщение от ksa (Сообщение 140869)
P.S.
Вот ведь живучий оказался...

Если вы это обо мне написали, то да, я очень упрямый ! :D :blink:

ksa 05.12.2011 16:51

Цитата:

Сообщение от xcode
вы это обо мне написали

Неее... Я про синтаксис этот. :)


Часовой пояс GMT +3, время: 20:03.