Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Очистить value поля input type=text (https://javascript.ru/forum/misc/45074-ochistit-value-polya-input-type%3Dtext.html)

izcian 13.02.2014 13:03

Очистить value поля input type=text
 
Мне нужно очистить value в поле input type="text". Я сделал так, не знаю правильно?;) (код ниже).
<!DOCTYPE HTML>
<html>
  <head><meta charset="utf-8"></head>
  <body>
	
	<div id="text" >	   
	   <input type="text" value="2" maxlength="150" size="70" name="alias">	  
	 </div>
	<br/>
	<div id="text2" >
	   <div>
	   <input type="text" value="222" maxlength="150" size="70" name="alias">
	   </div>
	   <div>
	   <input type="text" value="333" maxlength="150" size="70" name="alias2">
	   </div>
	 </div>
<script>
    var childNodes = document.getElementById("text2").childNodes;
	
	for (var i=0; i<childNodes.length; i++) {	
		if (childNodes[i].type == 'text') {
		    childNodes[i].value = '';
		    //alert(childNodes[i].type);
		}
    }
</script>
  </body>
</html>

Фишка в том, там где div id="text" value очищается. Там где div id="text2" уже нет.

Подскажите пожалуйста, как можно в id="text2" так же очищать value?

рони 13.02.2014 13:25

Цитата:

Сообщение от izcian
Подскажите пожалуйста, как можно в id="text2" так же очищать value?

выбрать по тегу input а не так как вы сейчас выбрали div и пробелы в div#text2
var childNodes = document.getElementById("text2").getElementsByTagName('input');// или так
    var childNodes = document.querySelectorAll('#text2 input');//или так

izcian 13.02.2014 13:27

Упс, даже не ожидал, кажется нашел решение, вроде работает...Прошу гуру js взглянуть на мое творчество:blink: , если не сложно может какие есть замечания?

if (childNodes[i].type == 'text') {
		    childNodes[i].value = '';
		    
		} else if (childNodes[i].tagName == 'DIV') {
		
		    var new_childNodes = childNodes[i].childNodes;
			
			for(var b=0; b<new_childNodes.length; b++) {
			
			    if (new_childNodes[b].type) {
				    
					if (new_childNodes[b].type == 'text') {
					    if (new_childNodes[b].value != '')
						    new_childNodes[b].value = '';
					}
				}
			}
		}

danik.js 13.02.2014 13:37

Если поля изначально пустые, далее заполняются юзером и нужно их очистить, то все проще:
<form id="form">
    <input type="text" name="alias" />
    <input type="text" name="alias2" />
    <button type="button" onclick="form.reset()">Очистить</button>
</form>
<script>
    form.alias.value = form.alias2.value = 'abc';
</script>

izcian 13.02.2014 13:38

Цитата:

Сообщение от рони (Сообщение 297433)
выбрать по тегу input а не так как вы сейчас выбрали div и пробелы в div#text2
var childNodes = document.getElementById("text2").getElementsByTagName('input');// или так
    var childNodes = document.querySelectorAll('#text2 input');//или так

Извините, что ввел Вас в заблуждение своим кодом. Дело вот в чем. Это кусок функции, которая должна очищать checked, selected или value в форме. Каждое поле заключено в div со своим id. И изначально неизвестно что в div, инпуты, селекты или textarea. Поэтому было решено применить такой подход.

danik.js 13.02.2014 13:43

izcian, дапофиг. Ты не доволен querySelectorAll ? Почему?
А есть еще form.elements - коллекция всех контролов (правда там и кнопки тоже) - тоже удобно. Правда вроде не кроссбраузерно...

izcian 13.02.2014 13:44

Цитата:

Сообщение от danik.js (Сообщение 297436)
Если поля изначально пустые, далее заполняются юзером и нужно их очистить, то все проще:
<form id="form">
    <input type="text" name="alias" />
    <input type="text" name="alias2" />
    <button type="button" onclick="form.reset()">Очистить</button>
</form>
<script>
    form.alias.value = form.alias2.value = 'abc';
</script>

danik.js понял Вас, но фишка в том, что нужно очищать определенные поля. Через ajax прилетает, что нужно очистить например поле с id="text2" (убрать чекеды, селекты или очистить value)

izcian 13.02.2014 13:52

Цитата:

Сообщение от danik.js (Сообщение 297438)
izcian, дапофиг. Ты не доволен querySelectorAll ? Почему?
А есть еще form.elements - коллекция всех контролов (правда там и кнопки тоже) - тоже удобно. Правда вроде не кроссбраузерно...

danik.js выбрать всех всех потомков через querySelectorAll?



Не совсем по теме, подскажите пожалуйста а как очистить textarea, а то че-то ничего не нашел в инете?

danik.js 13.02.2014 14:10

Цитата:

Сообщение от izcian
Через ajax прилетает, что нужно очистить например поле с id="text2"

Дык нафиг ты тогда итерируешься по всем childNodes. У тебя же есть айдишник - запроси его через getElementById и очищай (в зависимости от типа)
Цитата:

Сообщение от izcian
как очистить textarea

Абсолютно также как и текстовый инпут: element.value = "";

Vlasenko Fedor 13.02.2014 14:15

Цитата:

Сообщение от danik.js
У тебя же есть айдишник - запроси его через getElementById

Задам вопрос а в каких браузерах не работает прямое обращение по айдишнику?
id.value = "";

izcian 13.02.2014 15:01

Цитата:

Сообщение от danik.js (Сообщение 297441)
Дык нафиг ты тогда итерируешься по всем childNodes. У тебя же есть айдишник - запроси его через getElementById и очищай (в зависимости от типа)
Абсолютно также как и текстовый инпут: element.value = "";

danik.js разве есть другой способ убрать checked="checked" нежели чем через childNodes? То же самое радио кнопки, селекты.
Я просто другого способа не нашел
<div id="check" style="display: block;">
        <div>Раздел-товары: </div>
    <input type="checkbox" value="Для головы" name="check[]">
          Для головы
    <input type="checkbox" checked="checked" value="Для пуза" name="check[]">
         Для пуза
    <input type="checkbox" value="Для рук" name="check[]">
        Для рук
    </div>

рони 13.02.2014 15:15

izcian,
<!DOCTYPE HTML>
<html>
  <head><meta charset="utf-8"></head>
  <body>
 <div id="check" style="display: block;">
        <div>Раздел-товары: </div>
    <input type="checkbox" value="Для головы" name="check[]">
          Для головы
    <input type="checkbox" checked="checked" value="Для пуза" name="check[]">
         Для пуза
    <input type="checkbox" value="Для рук" name="check[]">
        Для рук
    </div>

<script>

    var childNodes = document.querySelectorAll('#check :checked');
	for (var i=0; i<childNodes.length; i++) {
		   childNodes[i].checked = !1;
  		}

</script>
  </body>
</html>

danik.js 13.02.2014 15:43

Цитата:

Сообщение от Poznakomlus
Задам вопрос а в каких браузерах не работает прямое обращение по айдишнику?

В IE8 (может 9) проблемы с полями формы. Точно не помню. Помоему там поля мапятся в объект window по имени (name), а не id.

Цитата:

Сообщение от рони
document.querySelectorAll('#check :checked')

В IE8 такой селектор не работает.
Цитата:

Сообщение от рони
!1

Нахуй?

danik.js 13.02.2014 15:50

Цитата:

Сообщение от danik.js
В IE8 (может 9) проблемы с полями формы.

Не, не так. В любом IE поля формы не мапятся в window никак вообще.

Если только дать id форме, а полям имена, то тогда можно юзать как formId.fieldName (но надо избегать конфликтов со свойствами формы)

рони 13.02.2014 16:07

danik.js,
то есть надо false писать? или как

Vlasenko Fedor 13.02.2014 16:34

<div id="check" style="display: block;">
  <div>Раздел-товары:</div>
  <input type="checkbox" value="Для головы" name="check[]">Для головы
  <input type="checkbox" checked="checked" value="Для пуза" name="check[]">Для пуза
  <input type="checkbox" value="Для рук" name="check[]">Для рук</div>
<script>
  for (
    var els = check.getElementsByTagName('input'), 
    len = els.length; 
    len;
    els[--len].checked = 0
  );
</script>

тогда можно так. 0 -> false, 1 -> true

izcian 13.02.2014 17:42

Poznakomlus честно признаться как у Вас for работает...Для меня как китайская грамота))

skrudjmakdak 13.02.2014 18:03

мой вариант: ))
<div id="check" style="display: block;">
  <div>Раздел-товары:</div>
  <input type="checkbox" value="Для головы" name="check[]">Для головы
  <input type="checkbox" checked="checked" value="Для пуза" name="check[]">Для пуза
  <input type="checkbox" value="Для рук" name="check[]">Для рук</div>
<script>
Array.prototype.forEach.call(document.querySelectorAll('input'), function (a)
	{
	a.checked = 0;
	});
</script>

danik.js 13.02.2014 21:33

Цитата:

Сообщение от skrudjmakdak
checked = 0

Да вы че, наркоманы что-ли? Про true/false не слыхали?
Цитата:

Сообщение от skrudjmakdak
Array.prototype.forEach

(notice: IE9+ solution)

skrudjmakdak 13.02.2014 21:44

Цитата:

Сообщение от danik.js (Сообщение 297545)
Да вы че, наркоманы что-ли? Про true/false не слыхали?

я скопипастил))

Цитата:

Сообщение от danik.js (Сообщение 297545)
(notice: IE9+ solution)

в топку ие))

Vlasenko Fedor 13.02.2014 21:52

Цитата:

Сообщение от danik.js
Да вы че, наркоманы что-ли? Про true/false не слыхали?

да пока нестрогое соответствие
alert(true == 1);
alert(false == 0);

я уверен, что конопля гораздо лучше водки
и если бы был закон ее легализации проголосовал за

danik.js 13.02.2014 22:10

Цитата:

Сообщение от Poznakomlus
да пока нестрогое соответствие

Окей... С этого дня буду писать:
el.checked = {};
el.checked = '';

А что, соответствие то нестрогое :) А логика? Да хрен на нее, лучше показать свою осведомленность о приведении типов ))

Я бы еще понял если бы увидел такое в C++, но не в JS.

skrudjmakdak 13.02.2014 22:12

ахахаха

Vlasenko Fedor 13.02.2014 22:35

Цитата:

Сообщение от danik.js
Я бы еще понял если бы увидел такое в C++, но не в JS.

http://closure-compiler.appspot.com/home
может покажешь стандарт где этот атрибут булев

danik.js 13.02.2014 22:43

Poznakomlus, ну если "минификаторы так делают же" - это аргумент, то давай еще писать скрипты в одну строчку, переменные в одну букву ну и так далее ))

Vlasenko Fedor 13.02.2014 22:45

может покажешь стандарт где этот атрибут булев

danik.js 13.02.2014 23:14

Цитата:

Сообщение от Poznakomlus
может покажешь стандарт где этот атрибут булев

А ты сомневаешься?
http://www.whatwg.org/specs/web-apps...-input-checked

Цитата:

The checked content attribute is a boolean attribute...

danik.js 13.02.2014 23:16

Тебе еще нужны "доказательства"?
alert(typeof document.createElement('input').checked);

Странный ты человек...

Vlasenko Fedor 13.02.2014 23:29

Цитата:

Сообщение от danik.js
А ты сомневаешься

Именно так. Стандарт обновленный буквально 2 дня назад.
или эти записи ты никогда не встречал
<input type="radio" checked>
<input type="checkbox" checked>
<input type="radio" checked="checked" />
<input type="checkbox" checked="checked" />

это спор не о чем конечно я бы не писал !0 или !1, но 0 и 1 вполне допустил бы
когда-то на вопрос такой оптимизации мне ответили это все равно что причесывать брови, делается в высоконагруженных проектах, где наверное не будет js

Vlasenko Fedor 13.02.2014 23:33

Цитата:

Сообщение от danik.js
Странный ты человек...

всем не странным это не интересно :)
Цитата:

Сообщение от danik.js
Тебе еще нужны "доказательства"?

нет вижу

danik.js 13.02.2014 23:54

Цитата:

Сообщение от Poznakomlus
<input type="radio" checked>
<input type="checkbox" checked>
<input type="radio" checked="checked" />
<input type="checkbox" checked="checked" />

Это и есть допустимые формы задания boolean атрибута в HTML.
И еще. Есть два понятия: content-атрибут и IDL-атрибут.

Вот то что ты показал - это способы задания content-атрибута булева типа. Есть еще вариант checked="".

А вот в контексте js уже речь должна идти об IDL атрибуте, и там уже способы задания зависят от языка.

К слову, я ссылку привел на content-атрибут, но не суть важно.


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