Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вывести массив с checkbox (https://javascript.ru/forum/misc/28569-vyvesti-massiv-s-checkbox.html)

nezzard 24.05.2012 23:10

Вывести массив с checkbox
 
Добрый вечер, помогите написать скрипт. Имеются пару групп чекбоксо

<form method=get action="#" name="chekcms">
	<input type=checkbox name="wordpress">wordpress<br>
	<input type=checkbox name="ucoz">ucoz<br>
	<input type=checkbox name="dle">dle<br>
	</form>

	<form method=get action="#" name="tagform">
	<input type=checkbox name="tag1">tag1<br>
	<input type=checkbox name="tag2">tag2<br>
	<input type=checkbox name="tag3">tag3<br>
	<input type=checkbox name="tag4">tag4<br>
	</form>


Помогите вывести резултат выбранных чекбоксов в массив и подставить вот сюда

window.location = 'http://site.ru/tag/' + energy + '&orderby=title&order=asc/';

bes 25.05.2012 00:30

Что именно вывести и в какой форме представить не совсем понятно.

<form  method=get action="#" name="chekcms">
  <input type=checkbox name="wordpress">wordpress<br>
  <input type=checkbox name="ucoz">ucoz<br>
  <input type=checkbox name="dle">dle<br>
</form>

<button id="myBut">click</button>

<script>
myBut.onclick = function () {
  var inp = document.getElementsByTagName('input');
  var length = inp.length;
  var mas = [];

  for (var i = 0; i < length; i++) {
    mas.push(inp[i].checked);
  }
  alert(mas);

}
</script>

Svetlana_ 05.10.2012 22:05

Скажите, как вывести результат в строку через запятую? Не true или false, а значения выбранных боксов.

bes 05.10.2012 22:10

join

Svetlana_ 05.10.2012 22:15

Вы можете представить готовый код? В ява-скрипт совсем не разбираюсь.

bes 05.10.2012 22:25

<form  method=get action="#" name="chekcms">
  <input type=checkbox name="wordpress">wordpress<br>
  <input type=checkbox name="ucoz">ucoz<br>
  <input type=checkbox name="dle">dle<br>
</form>

<button id="myBut">click</button>

<script>
myBut.onclick = function () {
	var inp = document.getElementsByTagName('input');
	var length = inp.length;
	var mas = [];

	for (var i = 0; i < length; i++) {
		mas.push(inp[i].nextSibling.textContent);//nodeValue, data
	}
	alert(mas.join(','));

}
</script>

Svetlana_ 05.10.2012 23:17

Выводятся не выбранные значения, а все...:(

bes 05.10.2012 23:24

так и тут не экстрасенсы ;)
<form  method=get action="#" name="chekcms">
  <input type=checkbox name="wordpress">wordpress<br>
  <input type=checkbox name="ucoz">ucoz<br>
  <input type=checkbox name="dle">dle<br>
</form>

<button id="myBut">click</button>

<script>
myBut.onclick = function () {
	var inp = document.getElementsByTagName('input');
	var length = inp.length;
	var mas = [];

	for (var i = 0; i < length; i++) {
		if (inp[i].checked) {
			mas.push(inp[i].nextSibling.nodeValue);
		}
	}
	alert(mas.join(','));

}
</script>

lord2kim 05.10.2012 23:24

Svetlana_,
<form  method=get action="#" name="chekcms">
  <input type=checkbox name="wordpress">wordpress<br>
  <input type=checkbox name="ucoz">ucoz<br>
  <input type=checkbox name="dle">dle<br>
</form>
 
<button id="myBut">click</button>
 
<script>
myBut.onclick = function () {
    var inp = document.getElementsByTagName('input');
    var length = inp.length;
    var mas = [];
 
    for (var i = 0; i < length; i++) {
        if (inp[i].checked) {
             mas.push(inp[i].nextSibling.textContent);//nodeValue, data
        }
    }
    alert(mas.join(','));
 
}
</script>

Svetlana_ 06.10.2012 00:26

Спасибо, парни. То, что нужно. :)

Использовать 'input' удобно ли? В форме могут оказаться другие поля, не чекбокс.

"так и тут не экстрасенсы" - "вы не знаете? так я вам объясню"
Русский язык не имеет ничего общего с производным от языка - проггерским русским. Кроме букв. Нонсенс. Но так есть. Не всегда найдёшься в какой такой форме задать вопрос, чтобы он был понятен не только русскому, который суть ухватит "влёт", но и русскому проггеру. Что поделать. Изменение сознания налицо :)

Ещё раз. Большое спасибо. Очень помогли. :)

bes 06.10.2012 09:18

Цитата:

Сообщение от Svetlana_
Использовать 'input' удобно ли? В форме могут оказаться другие поля, не чекбокс.

см. по ситуации
document.querySelectorAll('input[type=checkbox]');

Цитата:

Сообщение от Svetlana_
"так и тут не экстрасенсы" - "вы не знаете? так я вам объясню"
Русский язык не имеет ничего общего с производным от языка - проггерским русским. Кроме букв. Нонсенс. Но так есть. Не всегда найдёшься в какой такой форме задать вопрос, чтобы он был понятен не только русскому, который суть ухватит "влёт", но и русскому проггеру. Что поделать. Изменение сознания налицо

Что такое
Цитата:

Сообщение от Svetlana_
значения выбранных боксов.

?

nerv_ 06.10.2012 15:40

bes, ES5 ;)

<form  method=get action="#" name="chekcms">
    <input type=checkbox name="wordpress">wordpress<br>
    <input type=checkbox name="ucoz">ucoz<br>
    <input type=checkbox name="dle">dle<br>
</form>

<button id="myBut">click</button>

<script>
    myBut.onclick = function () {

        alert(
            Array.prototype.slice.call( document.getElementsByTagName( 'input' ) )
                .map( function( input ) {
                    return input.checked;
                })

        );
    }
</script>

Svetlana_ 06.10.2012 18:13

Вот, что в результате получилось. Не самая плохая форма выбора/добавления тегов.

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

<form method="post"> 
 
    <input type="text" id="tags" style=" width:300px" /> <a href="javascript:invWin()"> Selected Tags</a>
    
    <div id="theWin" style=" background:#f4f4f4; border:1px solid #ccc; margin-left: 300px; padding: 4px; visibility:hidden; position:absolute;">
        <input type="checkbox" name="wordpress" />wordpress<br>
        <input type="checkbox" name="ucoz" />ucoz<br>
        <input type="checkbox" name="dle" />dle<br>
    </div>
    
</form>
<button id="myBut">click</button>

<script>
function invWin(){
	if (document.getElementById("theWin").style.visibility =="visible") {
		document.getElementById("theWin").style.visibility="hidden"; 
	} else {
		document.getElementById("theWin").style.visibility="visible";
	}
}

myBut.onclick = function () {
	var inp = document.querySelectorAll('input[type=checkbox]');
	var length = inp.length;
	var mas = [];

	for (var i = 0; i < length; i++) {
		if (inp[i].checked) {
			mas.push(inp[i].nextSibling.nodeValue);
		}
	}
	document.getElementById("tags").value = mas.join(',');
}
</script>

bes 06.10.2012 18:17

а кнопочку запустить [html run]

Svetlana_ 06.10.2012 18:23

Что такое: "значения выбранных боксов"?

Вот, вот... и не знаешь, о чём спросили :)

1. "Значение"... Это, например - "Wordpress", оно же - false или true, оно же - чёрт его знает.

2. "Выбранных"... Это - выбранный список полей(извиняюсь за слово "список"), это - отмеченные чекбоксы, это - неизвестно кто, что выбрал.

3. "Боксы"... ну, это я уж не знаю зачем уж так-то уж.

4. Модератор попрёт за флуд.

Svetlana_ 06.10.2012 18:52

И ещё... Баловство, конечно, но для пользователя будет удобно, если уже введённое слово(новый тег) или слова с запятыми не удалялись из поля "tags" при добавлении существующих тегов.

В принципе, можно обойтись и без этого - в хелпе прописала маленькую инструкцию, мол, сначала выбери, а затем уж добавляй новое. Однако, вроде как-то несовременно.

Если найдёте время, уважаемые профессора, создайте решение, плз (не сочтите за наголовуусаживание - код пригодится оччень многим новичкам).

bes 06.10.2012 19:37

Цитата:

Сообщение от Svetlana_
И ещё... Баловство, конечно, но для пользователя будет удобно, если уже введённое слово(новый тег) или слова с запятыми не удалялись из поля "tags" при добавлении существующих тегов.

это как?

lord2kim 06.10.2012 19:47

Svetlana_,
if (document.getElementById("tags").length > 0) {
document.getElementById("tags").value += document.getElementById("tags").value.charAt(document.getElementById("tags").length-1) != "," ? ","+mas.join(',') : mas.join(",");
} else {
document.getElementById("tags").value = mas.join(",");
}

bes 06.10.2012 20:00

Зачем вообще кнопка
<form method="post"> 
	<input type="text" id="tags" style=" width:300px"/> 
	<a href="#"> Selected Tags</a>
	<div id="theWin" style=" background:#f4f4f4; border:1px solid #ccc; margin-left: 300px; padding: 4px; visibility:hidden; position:absolute;">
		<input type="checkbox" name="wordpress" />wordpress<br>
		<input type="checkbox" name="ucoz" />ucoz<br>
		<input type="checkbox" name="dle" />dle<br>
	</div>
</form>

<script>
window.onload = function () {
	var form = document.forms[0];
	var inp = form.children[0];
	var  st = form.children[2].style;
	
	form.onclick = function (e) {
		e = e || event;
		var target = e.target || e.srcElement;
		if (target.tagName == 'A') {
			(st.visibility != 'visible') ? st.visibility = 'visible': st.visibility = 'hidden';
		} else 
		if (target.checked) {
			inp.value += target.nextSibling.nodeValue + ', ';
		} else {
			inp.value = inp.value.replace(target.nextSibling.nodeValue + ', ', '');
		}
	}
}
</script>

Svetlana_ 06.10.2012 20:18

lord2kim,
if (document.getElementById("tags").length > 0)

, - это условие не работает.
Сработало так:
if (document.getElementById("tags").length != '')

Отличная штука :)

Для полного счастья не хватает условий:
- удалить при нажатии на кнопку введённые в поле "tags" слова, короче n-символов (допустим - 3),
- удалить повторные тэги.

Повторные теги образуются, когда в поле вручную введён тег, который далее ошибочно ещё и выбирается из имеющихся.

Svetlana_ 06.10.2012 20:21

bes,
"Зачем вообще кнопка".

В смысле?

bes 06.10.2012 20:31

Цитата:

Сообщение от Svetlana_
bes,
"Зачем вообще кнопка".

В смысле?

зачем нажимать на кнопку, чтобы вставить текст

Svetlana_ 06.10.2012 20:39

bes,
это как вариант. Организация всей формы может быть разной.

В вашем варианте желательно обойтись вообще без checkbox-ов. Логичным будет список ссылок (либо списки ol, li или т.п.), при нажатии на которые в поле "вбрасываются" слова.

Svetlana_ 07.10.2012 23:22

Нда... В общем, ошалев за последние сутки от избыточного синтаксиса ява-скрипт и попыток понять извратный мозг создателя этого "языка", так и не смогла изобразить что-либо путное из ваших кодов непосредственно на сайте. Буду делать на рнр, где всё чётко, чисто и понятно. Через JsHttpRequest. Но, конечно, уже не таким удобным способом для пользователей.

Хотела вам плюсиков добавить за отзывчивость, но тут запрещено подряд плюсовать.
Спасибо большое, парни. Редко на каком форуме проггеры помогают быстро, без суеты и оскорблений. Респект.

Sveta 26.10.2012 10:39

Цитата:

Сообщение от Svetlana_ (Сообщение 208465)

Использовать 'input' удобно ли? В форме могут оказаться другие поля, не чекбокс.

Здравствуйте) Скажите а действительно, вместо input как можно еще получить массив чекбоксов?

bes 26.10.2012 13:16

Цитата:

Сообщение от Sveta
Здравствуйте) Скажите а действительно, вместо input как можно

c помощью jquery :)

Влади_мир 01.10.2013 21:15

Добрый день. Еще про выборку тегов: вот есть выпадающие списки в которых прописаны теги и нужно чтоб поиск суммировался по этим трем выбранным тегам.
Код то я нашел в инете :) но чуть-чуть не работает:

<form action="" method="get" name="vyborka">

	Ширина профиля
   <select size="1" id="shirina">
    <option value="0" selected>&nbsp;</option>
    <option value="145">145</option>
    <option value="155">155</option>
    <option value="165">165</option>
  </select>

   Высота профиля
   <select size="1" id="vysota">
    <option value="0" selected>&nbsp;</option>
    <option value="40">40</option>
    <option value="45">45</option>
   </select>

    Диаметр
   <select size="1" id="diametr">
    <option value="0"  selected>&nbsp;</option>
    <option value="R12">12</option>
    <option value="R13">13</option>
    <option value="R14">14</option>
   </select>
   
    <button id="knopka1">Подобрать</button>
   <!--<input type="button" value="Подобрать" onclick="сюда пишем обработчик формы"> я сделал как bes  написал на 1-й стр. -->
  
</form>
</td></tr></table>
</div>


<script>
knopka1.onclick = function () {
var flag=0;

var shirina='';
if (document.getElementById('shirina').value!='0') {
 shirina = document.getElementById('shirina').value;
 flag=1;
} else {shirina='';}

var vysota='';
if (document.getElementById('vysota').value!='0') {
 if (flag!=0) { vysota='+'; }
 vysota += document.getElementById('vysota').value;
 flag=1;
} else {vysota='';}

var diametr='';
if (document.getElementById('diametr').value!='0') {
 if (flag!=0) { diametr='+';}
 diametr += document.getElementById('diametr').value;
} else {diametr='';}
top.location.href='#/?tag='+shirina+vysota+diametr;
}
</script>


Этот код выдает в командной строке: сайт.ru/stranitsa?#/?tag=тэг1+тэг2+тэг3
то есть, не хочет писать как надо: сайт.ru/?tag=тэг1+тэг2+тэг3

Пробовал добавлять "window" перед top, знак + вместо "=", index.php и еще кучу вариантов...
пробовал в action= писать "vyborka.php" и в него переносить код джавы - вообще пустую страницу выдает.

Подскажите, плиз, как добиться такой выдачи: сайт.ru/?tag=тэг1+тэг2+тэг3


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