Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   как удалить form'у (https://javascript.ru/forum/css-html/44992-kak-udalit-form%27u.html)

Belai 10.02.2014 07:49

как удалить form'у
 
Привет!
Есть код. Добавление формы на старницу с двумя
text
по нажатию на кнопку.

function CreateFormElement(){
   
  var createtime = new Date().getTime();   

  var Form = document.getElementById('fms')
  var Inner = document.createElement('input');
  Inner.type = 'text';
  Inner.value = '';
  Inner.name = 'size___' + createtime;
  Form.appendChild(Inner);
 
  var Form2 = document.getElementById('fms')
  var Inner2 = document.createElement('input');
  Inner2.type = 'text';
  Inner2.value = '';
  Inner2.name = 'price___' + createtime;
  Form2.appendChild(Inner2);
 
 
  var Br = document.createElement('br');
  Form.appendChild(Br);
}

<input type="button" value="добавить поля формы" onClick="CreateFormElement()">


Как удалить одну из форм, если она стала не нужна?!

danik.js 10.02.2014 08:24

Цитата:

Сообщение от Belai
var Form = document.getElementById('fms')
...
var Form2 = document.getElementById('fms')

Ну ну, а че две всего? Даешь еще кучку:
var Form3 = document.getElementById('fms')
var Form4 = document.getElementById('fms')
var Form5 = document.getElementById('fms')

Веселуха же!!!
Цитата:

Сообщение от Belai
Как удалить одну из форм, если она стала не нужна?!

Форму или поле из формы?
form.removeChild(input); // где form - ссылка на элемент формы, input - ссылка на удаляемое поле.

Цитата:

Сообщение от Belai
Form, Inner, CreateFormElement

Имена переменных с большой буквы - очень заментый признак некомпетентности. Ровные пацаны знают, что в JS с большой буквы именуются только конструкторы.

Belai 10.02.2014 08:39

Вы очень жестоко меня троллите! Я расстроен! =D

Удалить форму. Нажимаем на кнопку добавить, скажем 3 раза, появляется 3 формы с 2 полями. Мне захотелось удалить 2-ую форму. Как это сделать!?

Я за код прошу прощения, ибо вообще не шарю в JS. И тут я именно поэтому.

Ну а вообще, спасибо. Хоть и троллите, но помогаете. =)

ksa 10.02.2014 08:53

Цитата:

Сообщение от Belai
Вы очень жестоко меня троллите!

Он тебе объясняет, что ИД должен быть уникальным на странице.

Цитата:

Сообщение от Belai
Мне захотелось удалить 2-ую форму. Как это сделать!?

Получить ссылку на нее и воспользоваться методом removeChild()...
http://shpargalkablog.ru/2013/08/app...avascript.html

danik.js 10.02.2014 09:07

Цитата:

Сообщение от ksa
Он тебе объясняет, что ИД должен быть уникальным на странице.

Да форма вроде одна, просто переменных зачем-то две. Ну я и предложил увеличить их количество. А че, жрать не просять же)

Цитата:

Сообщение от Belai
Вы очень жестоко меня троллите!

Да ну прям.
Цитата:

Сообщение от Belai
Я расстроен! =D

С таким то кодом еще бы не расстроиться :)

<!DOCTYPE html>
<form id="fms"></form>
<script>
var fields = [];
function addField(){
    var form = document.getElementById('fms');
    var field = document.createElement('div');
    var inputs = ['size', 'price'];
    for (var i = 0; i < inputs.length; i++) {
        var input = document.createElement('input');
        input.name = inputs[i] + '[]';
        field.appendChild(input);
    }
    form.appendChild(field); // добавляем на страницу
    fields.push(field); // добавляем в наш массивчик
}
function removeField(index) {
    var field = fields[index];
    if (!field)
        return alert('Нет формы с индексом ' + index);
    field.parentNode.removeChild(field); // удаляем из страницы
    fields.splice(index, 1); // удаляем из массивчика
}
</script>
<input type="button" value="добавить поля формы" onclick="addField()">
<input type="button" value="удалить второе поле" onclick="removeField(1)">

ksa 10.02.2014 09:29

Цитата:

Сообщение от danik.js
Да форма вроде одна

По ИДешнику он точно будет брать только одну. :yes:

Belai 10.02.2014 11:41

Цитата:

Сообщение от danik.js (Сообщение 296853)
Да форма вроде одна, просто переменных зачем-то две. Ну я и предложил увеличить их количество. А че, жрать не просять же)


Да ну прям.

С таким то кодом еще бы не расстроиться :)

<!DOCTYPE html>
<form id="fms"></form>
<script>
var fields = [];
function addField(){
    var form = document.getElementById('fms');
    var field = document.createElement('div');
    var inputs = ['size', 'price'];
    for (var i = 0; i < inputs.length; i++) {
        var input = document.createElement('input');
        input.name = inputs[i] + '[]';
        field.appendChild(input);
    }
    form.appendChild(field); // добавляем на страницу
    fields.push(field); // добавляем в наш массивчик
}
function removeField(index) {
    var field = fields[index];
    if (!field)
        return alert('Нет формы с индексом ' + index);
    field.parentNode.removeChild(field); // удаляем из страницы
    fields.splice(index, 1); // удаляем из массивчика
}
</script>
<input type="button" value="добавить поля формы" onclick="addField()">
<input type="button" value="удалить второе поле" onclick="removeField(1)">

А если надо не 2 а 4 или 5 или 19 ? =D

Belai 10.02.2014 11:42

Цитата:

Сообщение от ksa (Сообщение 296858)
По ИДешнику он точно будет брать только одну. :yes:

Я бы и рад по id взять... только как )))

Belai 10.02.2014 11:42

Спасибо за ответы! =)

ksa 10.02.2014 11:43

Цитата:

Сообщение от Belai
А если надо не 2 а 4 или 5 или 19 ?

У тебя вообще одна форма...

Belai 10.02.2014 11:46

Товарищи, а если в форму вложить кнопку?!
И удалять вот так!?

<button onclick="this.parentNode.removeChild(this);">Вариант 1</button>
<button onclick="this.remove();">Вариант 2</button>

Belai 10.02.2014 11:46

Цитата:

Сообщение от ksa (Сообщение 296882)
У тебя вообще одна форма...

Ну я же по нажатию на кнопку создаю их.

danik.js 10.02.2014 11:56

Цитата:

Сообщение от Belai
this.parentNode.removeChild(this);

Так ты удалишь кнопку :)
Цитата:

Сообщение от Belai
Ну я же по нажатию на кнопку создаю их

Так, давай определимся. Форма - это элемент <form>, а то, что ты создаешь - это парочка полей формы.

Belai 10.02.2014 12:03

Цитата:

Сообщение от danik.js (Сообщение 296890)
Так ты удалишь кнопку :)

Так, давай определимся. Форма - это элемент <form>, а то, что ты создаешь - это парочка полей формы.

Мне надо удалить выбранные поля. =(
Желательно по нажатию на одну кнопку.
Например: поставил курсор в одну форму, где парочка полей и по нажатию на кнопку, удаляешь .

А нельзя к форме привязать такую кнопку, которая удаляет и себя и эту форму с полями?

danik.js 10.02.2014 12:29

Цитата:

Сообщение от Belai
А нельзя к форме привязать такую кнопку, которая удаляет и себя и эту форму с полями?

Создавай кнопку, в обработчике клика пиши:
var field = this.parentNode;
field.parentNode.removeChild(field);

Belai 10.02.2014 12:33

Цитата:

Сообщение от danik.js (Сообщение 296895)
Создавай кнопку, в обработчике клика пиши:
var field = this.parentNode;
field.parentNode.removeChild(field);

Спасибо!
Сейчас попробую )!

Belai 10.02.2014 12:49

Цитата:

Сообщение от Belai (Сообщение 296897)
Спасибо!
Сейчас попробую )!

Я правильно понял!?

var field = this.parentNode;


Записываем в функцию?

а,
<input type="button" onclock="field.parentNode.removeChild(field);"
, по кнопке?! Нет ?! )))

danik.js 10.02.2014 13:02

Цитата:

Сообщение от Belai
onclock

Что еще за событие clock? Аппаратное прерывание ? )))
Обработчик надо через js, при создании кнопки навешивать.
button.onclick = function() {
   alert('bla bla');
};

Belai 10.02.2014 13:31

Цитата:

Сообщение от danik.js (Сообщение 296902)
Что еще за событие clock? Аппаратное прерывание ? )))
Обработчик надо через js, при создании кнопки навешивать.
button.onclick = function() {
   alert('bla bla');
};

=D да это была опечатка onClick, конечно же )))

Тем не менее не пойму куда запихать

var field = this.parentNode;
field.parentNode.removeChild(field);

danik.js 10.02.2014 13:39

Цитата:

Сообщение от Belai
Тем не менее не пойму куда запихать

вместо алерта.

Belai 10.02.2014 13:46

Так и делал. А на форме написал:

<input type='button' value="DELETE" onClick="button.onClick()";/>


Реакции нет. =(

danik.js 10.02.2014 14:03

Цитата:

Сообщение от Belai
А на форме написал

Дык тебе только одна кнопка нужна? Покажи весь код (и HTML и JS)

Belai 10.02.2014 14:34

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Untitled Document</title>

</head>

<script language="javascript">


function CreateFormElement(){
  var createtime = new Date().getTime();   
  var Form = document.getElementById('fms')
  var Inner = document.createElement('input');
  Inner.type = 'text';
  Inner.value = '';
  Inner.name = 'size___' + createtime;
  Form.appendChild(Inner);
  var Br = document.createElement('br');
  Form.appendChild(Br);
}

                button.onClick = function () {
                              var field=this.parentNode;
                              field.parentNode.removeChild(field);
                }

               

--></script>

<body>
<form  id="fms" method="get" action=""><br />
<input type="button" value="добавить поля формы" onClick="CreateFormElement()">
<input type="button" value="Delete" onClick="button.onClick()" />
</form>
</body>
</html>


На конопку DELETE нажимаю, ничего не происходит.

Да, можно одну кнопку. А можно и кнопку, которая будет появляться вместе с полем и по нажатию на нее, удалялось поле.

danik.js 10.02.2014 14:57

Опять это уродство. А что, мой код забраковал? Чем плох?
Цитата:

Сообщение от Belai
XHTML 1.0 Transitional

но при этом
Цитата:

Сообщение от Belai
<input type="button" value="добавить поля формы" onClick="CreateFormElement()">

Раз зарекся доктайпом писать XHTML - будь добр пиши XHTML. То же касается атрибута type скрипта. Но я бы просто заменил доктайп на <!DOCTYPE html> и похеру на все.

Belai 10.02.2014 15:09

Почему забраковал!? Вот же он:

button.onClick = function () {
	                              var field=this.parentNode;
	                              field.parentNode.removeChild(field);
	                }


А потом добавил кнопку:
<input type="button" value="Delete" onClick="button.onClick()" />

и мое воспаленное воображение думало что удалится любое поле, которое я только захочу. ))))))

А что касается второго вопроса. Я даже не понимаю о чем речь =D


Можно ваш вариант как должно быть?! =)

danik.js 10.02.2014 15:39

Цитата:

Сообщение от Belai
А что касается второго вопроса. Я даже не понимаю о чем речь =D

У тебя доктайп от XHTML документа. То есть твой HTML код должен быть совместим с XML-синтаксисом:
не <input> , а <input />.
Также этот доктайп требует обязательный атрибут type у тега <script>.
А вот атрибут language возможно даже запрещен. И вобще, один хер документ будет распарсен HTML-парсером, а не XML, так что пофиг.

Ну все это по сути мелочи. Если бы браузеры всерьез воспринимали, то ща с бы неработало 99% интернет-страниц )))
Ибо веб-девелоперы в своем большинстве плюют на/не знают все эти "стандарты".

<!DOCTYPE html>
<head>
    <title>Untitled Document</title>
</head>
<body>
    <form id="fms">
        <script>
        (function(){
            var fields = [];
            window.addField = function(){
                var form = document.getElementById('fms');
                var field = document.createElement('div');
                var inputs = ['size', 'price'];
                for (var i = 0; i < inputs.length; i++) {
                    var input = document.createElement('input');
                    input.name = inputs[i] + '[]';
                    field.appendChild(input);
                }
                form.appendChild(field); // добавляем на страницу
                fields.push(field); // добавляем в наш массивчик
            }
            window.removeField = function() {
                var field = fields.pop();
                if (!field)
                    return alert('Нечего удалять');
                field.parentNode.removeChild(field); // удаляем из страницы
            }
        })();
        </script>
        <input type="button" value="добавить поля формы" onclick="addField()">
        <input type="button" value="удалить поля" onclick="removeField()">
    </form>
</body>

danik.js 10.02.2014 15:47

Или даже так:
<!DOCTYPE html>
<head>
    <title>Untitled Document</title>
</head>
<body>
    <form id="fms">
        <input type="button" name="add" value="добавить поля формы">
        <input type="button" name="remove" value="удалить поля">
        <script>
        (function(){
            var form = document.getElementById('fms');
            var fields = [];
            var buttons = {
                add: form.add,
                remove: form.remove
            };
            buttons.add.onclick = addField;
            buttons.remove.onclick = removeField;
            updateButtonsState();
            function updateButtonsState() {
                buttons.remove.disabled = fields.length <= 1;
            }
            function addField(){
                var field = document.createElement('div');
                var inputs = ['size', 'price'];
                for (var i = 0; i < inputs.length; i++) {
                    var input = document.createElement('input');
                    input.name = inputs[i] + '[]';
                    field.appendChild(input);
                }
                form.appendChild(field); // добавляем на страницу
                fields.push(field); // добавляем в наш массивчик
                updateButtonsState();
            }
            function removeField() {
                var field = fields.pop();
                field.parentNode.removeChild(field); // удаляем из страницы
                updateButtonsState();
            }
        })();
        </script>
    </form>
</body>

Belai 10.02.2014 15:50

Оу, спасибо за разъяснение! Прям очень порадовало. Не ожидал =)

А удаляется только последние 2 из созданных...а если мне надо удалить поля из середины? По идее они должны быть заполнены. И как только одна из задач решена, поле удаляется, вручную )

danik.js 10.02.2014 16:00

Цитата:

Сообщение от Belai
а если мне надо удалить поля из середины?

Ну это ты уже сам. Создавай кнопку динамически внутри функции addField (вроде того, как создается инпут), вешай на нее обработчик, который был предложен выше, ну и тогда массив fields наверно не понадобится.

Belai 10.02.2014 16:15

Ок, спасибо большое! =)


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