Javascript-форум (https://javascript.ru/forum/)
-   Я не знаю javascript (https://javascript.ru/forum/ya-ne-znayu-javascript/)
-   -   не выходит посчитать отмеченные чекбоксы (https://javascript.ru/forum/ya-ne-znayu-javascript/3962-ne-vykhodit-poschitat-otmechennye-chekboksy.html)

Avaria 09.06.2009 18:44

не выходит посчитать отмеченные чекбоксы
 
Некокое подобие доски объявлений, вся основная суть не вжна важен маленкьий момент. надо выбрать необходимые строки (поставить галочку в чекбоксе) при этом в скрытом поле должна прибавиться 1, и чекбоксик стать неактивным. При нажатии на кнопочку рядом выводится количество выбранных "объявлений".
То что было сделано приведено ниже, проблема состоит в том, что когда начинаю ставить галочку 1) считать начинает только после изменения второго чекбокса, 2) и вообще блакировка чекбокса срабатывает через раз
<form name="f1">
         <table>
         <tr><td><input type="checkbox" id="favID" onChange="change(1,0)" /></td><td>куплю</td><td>222-22-22</td></tr>
         <tr><td><input type="checkbox" id="favID" onChange="change(1,1)" /></td><td>Продам</td><td>111-11-11</td></tr>
         <tr><td><input type="checkbox" id="favID" onChange="change(1,2)" /></td><td>Поменяю</td><td>789-88-88</td></tr>
         <tr><td><input type="checkbox" id="favID" onChange="change(1,3)" /></td><td>Отдам</td><td>999-99-99</td></tr>
         </table>
         <input type="text" name="kol_checked" value="0">
<DIV>
<input type="button" value="Добавить отмеченное в избранное" onClick="add_fav(f1.kol_checked.value)" checked="checked"> &nbsp;&nbsp;
<a href="favorite.html"><span id="fav_count">Избранное ()</span></a>
</DIV>
</form>
<script>
	var i;
	i=f1.kol_checked.value;
	function change(a,b)
	{if(f1.elements[b].checked!=="checked")
	  {f1.kol_checked.value=a*1+f1.kol_checked.value*1;}
	}
		  
	function add_fav(n)
	{i=i*1+n*1;
	 fav_count.innerHTML="Избранное("+i+")";
	};
	</script>

Octane 09.06.2009 19:58

  • Вы проверяете свойство DOM-объекта, а не атрибут тега, поэтому checked == true;
  • Идентификаторы должны быть уникальными;
  • Поиск элемента по идентификатору выполняется с помощью document.getElementById.

x-yuri 10.06.2009 02:36

Цитата:

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

передавать "a" не имеет смысла - все равно везде 1 передается

если нужно получить доступ к checkbox'у можно передать его таким образом
<input type="checkbox" id="favID" onChange="change(this)" />
<script>
    function change(checkbox)
    {if(checkbox.checked...
</script>


умножать на 1 имеет смысл только строки, а лучше Number(f1.kol_checked.value) или parseInt(f1.kol_checked.value)

Avaria 10.06.2009 06:52

Спасибо за ЦУ, подправила. но основная проблема так и не решена считать начинает все также только после изменения второго чекбокса, и блокировка чекбокса срабатывает при переходе к следующему элементу :(

Avaria 10.06.2009 09:45

одну беду разрешила, пришла другая :)
в общем, теперь у нас все реагирует на событие onClick
<form name="f1">
         <table>
         <tr><td><input type="checkbox" id="favID01" onClick="change(this)" /></td><td>куплю</td><td>222-22-22</td></tr>
         <tr><td><input type="checkbox" id="favID02" onClick="change(this)" /></td><td>Продам</td><td>111-11-11</td></tr>
         <tr><td><input type="checkbox" id="favID03" onClick="change(this)" /></td><td>Поменяю</td><td>789-88-88</td></tr>
         <tr><td><input type="checkbox" id="favID04" onClick="change(this)" /></td><td>Отдам</td><td>999-99-99</td></tr>
         </table>
         <input type="text" name="kol_checked" value="0">
<DIV>
<input type="button" value="Добавить отмеченное в избранное" onClick="add_fav(f1.kol_checked.value)" checked="checked"> &nbsp;&nbsp;
<a href="favorite.html"><span id="fav_count">Избранное ()</span></a>
</DIV>
</form>

Теперь, не смотря на условие и состояние чекбокса (поставленна там галочка или нет) он все равно прибавляет 1 :(
var i;
	i=f1.kol_checked.value;
	function change(checkbox)
	{	if(checkbox.checked==true)
	{f1.kol_checked.value=f1.kol_checked.value*1-1;}
	else
	{f1.kol_checked.value=1+f1.kol_checked.value*1;}
	}

Avaria 10.06.2009 10:15

Все. Нашла все ошибки. Всем спасибо за участие :rolleyes:


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