Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Значение checkbox отправляется в <textarea>


Автор: Enya 12.11.2006, 15:29
Есть некий перечень из 10-12 пунктов. все checkbox-ы
Есть поле <textarea> и как только я поставил галочку, напротив какого-то слова (пукта), это слово попало в поле тега <textarea>. smile  smile 

Автор: SelenIT 12.11.2006, 15:34
А при сбросе этого чекбокса, если я верно понимаю, нужно найти соответствующее слово в textarea и удалить его оттуда?

Автор: skyboy 12.11.2006, 15:52
Код

<html>
<head>
<script type="text/javascript">
function getNextSiblingTextNode(el)
{
 while(el != undefined && el != null && el.nodeType != 3)
  el= el.nextSibling;
 if(el != null)
  return el.nodeValue;
 else 
  return '';
}
function check(el)
{
if(el.txtNode == undefined) 
{
 if(el.checked)
 {
  el.txtNode= document.createTextNode(getNextSiblingTextNode(el));
  document.getElementById('target').appendChild(el.txtNode);
 }
 else
  el.txtNode= undefined;
}
else
{ 
 el.txtNode.parentNode.removeChild(el.txtNode);
 el.txtNode= undefined;
}
}
</script>
</head>
<body>
<textarea id="target">
</textarea>
<br />
<input type="checkbox" onclick="check(this);" />first check
<input type="checkbox" onclick="check(this);" />third check
<input type="checkbox" onclick="check(this);" />second check
</body>
</html>

Воспользуемся двумя вещами:
1. можно добавлять собственные свойства  "стандартным" казалось бы объектам
2. несмотря на наличие свойства value у textarea можно запихивать chilDNodes и они будут отображаться "внутри"

Автор: SelenIT 12.11.2006, 16:09
skyboy, красота! Большое спасибо за поучительную демонстрацию того, что 
Цитата(skyboy @  12.11.2006,  15:52 Найти цитируемый пост)
у textarea можно запихивать chilDNodes и они будут отображаться "внутри"

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

Автор: Enya 12.11.2006, 16:26
skyboy, Спасибо. + я уже отправила. действительно красиво и то что нужно показано.

Автор: skyboy 12.11.2006, 17:24
SelenIT, сам не знал до прошлой недели smile зато как широко можно такую штуку использовать!

Автор: 12345c 12.11.2006, 17:27
Что-то красоты не видать. В FF1.07, NS8.1 возникает артефакт - 2-е висящее изображение последнего введённого текста. Оперы 7.54, 8.01 не работают.

Автор: SelenIT 12.11.2006, 18:40
12345c, 
Цитата(12345c @  12.11.2006,  17:27 Найти цитируемый пост)
Оперы 7.54, 8.01 не работают

Увы, да. И что еще хуже, 9.01 - тоже. Причем оказалось, что (как минимум в 8.02 и 9.01) текстовые ноды внутрь textarea добавляются, но почему-то не отображаюются. Строчка
Код

document.getElementById('target').value = document.getElementById('target').innerHTML;

в конце функции check() приводит Оперу в чувство (текст начинает отображаться), но остается другой артефакт - пустые строки в начале и конце текстарии (лечится дополнительным риплейсом). А в IE значения изначально выводятся в одну строчку...
Но разве эти нюансы и тонкости отменяют сам принцип  smile ?

Автор: skyboy 12.11.2006, 18:58
Цитата(SelenIT @  12.11.2006,  17:40 Найти цитируемый пост)
А в IE значения изначально выводятся в одну строчку...

ага. придется делать принудительный перенос строки smile
Цитата(12345c @  12.11.2006,  16:27 Найти цитируемый пост)
В FF1.07, NS8.1 возникает артефакт - 2-е висящее изображение последнего введённого текста. Оперы 7.54, 8.01 не работают. 

я вообще не ожидал, что нечто вне .value будет отображаться внутри textarea. потому смею предположить, что это скорее бага и сильно рассчитывать на неё не стОит. кроме того, я не проверил, что будет отправляться обработчику формы - будут ли там добавленные ноды...

Автор: 12345c 12.11.2006, 19:49
Этот баг в FF2.0 исправлен, а в 1.5.07 как?

Автор: skyboy 12.11.2006, 22:11
12345c, что именно? отобраджение дочерних узлов аки наполнение? нет, не исправлен, я отлаживал как раз под 1.5.0.7

Автор: 12345c 12.11.2006, 23:11
Это:

Добавлено @ 23:15 
(Это всё лирика, а решение - брать Сборную солянку-3 из раздела "Наши скрипты" и устраивать кнопки (не чекбоксы) для вывода. Убираться, конечно, не будут по снятию чекбокса.)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)