Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   checkbox решаем что делать (https://javascript.ru/forum/dom-window/56280-checkbox-reshaem-chto-delat.html)

biryukovm 08.06.2015 12:42

checkbox решаем что делать
 
Привет всем. Что то я облазил поисковики и не нашел нормальной инфы.

У меня вопрос в следующем. Хотелось б все сделать на JS без Query.

Есть <input type="checkbox" class="fl_select" iid="'.$row["id"].'" '.$fl_select.'/>


Необходимо при клике определить стоит ли галочка или нет


Это для того чтобы решить какой запрос выполнить.


Пример кликнули по checkbox если стоит галочка высветилось сообщение стоит , если нет то сообщить что нет.

И при сообщении сменить checkbox. Если он был включен то выключить потом , если выключен то включить.

ksa 08.06.2015 13:49

Цитата:

Сообщение от biryukovm
Что то я облазил поисковики и не нашел нормальной инфы.
Хотелось б все сделать на JS без Query.

Есть
<input type="checkbox" class="fl_select" iid="'.$row["id"].'" '.$fl_select.'/>

Необходимо при клике определить стоит ли галочка или нет

Х/з где ты там лазил... :D Но есть событие onclick оно и поможет тебе в решении. ;)

pornoborets 08.06.2015 14:46

Цитата:

Сообщение от ksa
Но есть событие onclick оно и поможет тебе в решении

А конкретно? Как оно может помочь, если оно совпадает с изменением чекбокса, и, фактически, имеет мЕньший приоритет(инициируется уже после изменения)

ksa 08.06.2015 15:46

Цитата:

Сообщение от pornoborets
оно совпадает с изменением чекбокса, и, фактически, имеет мЕньший приоритет

Тогда используй событие onchange...

Endy 08.06.2015 15:53

pornoborets,
:-?
<!doctype html>
<html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    
    <body>
        <input type="checkbox" class="fl_select" id="row1" checked="checked" />
        <input type="checkbox" class="fl_select" id="row2" />
        <script>
            [].forEach.call(document.getElementsByClassName('fl_select'), function(e) {
                e.onclick = function() {
                    alert('Было ' + (!this.checked ? 'вкл' : 'выкл'));
                    alert('Стало ' + (this.checked ? 'вкл' : 'выкл'));
                }
            })
        </script>
    </body>

</html>

ksa 08.06.2015 16:39

С onchange аналогично...

<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<!--
<script src='http://code.jquery.com/jquery-latest.js'></script>
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
<link rel='stylesheet type=text/css href=tmp.css' />
<link rel="stylesheet/less" type="text/css" href="style.less">
<script src="http://cdnjs.cloudflare.com/ajax/libs/less.js/2.5.0/less.min.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
</script>
</head>
<body>
<input type="checkbox" class="fl_select" id="row1" checked="checked" />
<input type="checkbox" class="fl_select" id="row2" />
<script>
	[].forEach.call(document.getElementsByClassName('fl_select'), function(e) {
		e.onchange = function() {
			alert('Было ' + (!this.checked ? 'вкл' : 'выкл'));
			alert('Стало ' + (this.checked ? 'вкл' : 'выкл'));
		}
	})
</script>

</body>
</html>

pornoborets 08.06.2015 16:47

Endy,
То есть, Вы инвертируете, как-бы, значения. Но ведь, ТС'у надо было именно узнать значение поля до изменения. Получается, такого способа нет? И, остается вопрос, насколько Ваш метод надежен, в плане кроссбраузерности, и так далее. Ведь это, фактически, грязный хак, причем, извращенный, к тому же.

pornoborets 08.06.2015 16:48

ksa,
Спасибо, капитан.

Endy 08.06.2015 18:08

pornoborets,
Цитата:

Сообщение от pornoborets
То есть, Вы инвертируете, как-бы, значения. Но ведь, ТС'у надо было именно узнать значение поля до изменения.

Меняя текущее состояние на противоположное,мы и получаем предыдущее(до изменения).
Цитата:

Сообщение от pornoborets
И, остается вопрос, насколько Ваш метод надежен, в плане кроссбраузерности

Можно подключить полифиллы.
Цитата:

Сообщение от pornoborets
Ведь это, фактически, грязный хак, причем, извращенный, к тому же.

Предложите свой вариант,будет интересно посмотреть :)

pornoborets 08.06.2015 18:57

Цитата:

Сообщение от Endy
Предложите свой вариант,будет интересно посмотреть

Я не знаю.

ksa 09.06.2015 08:16

Цитата:

Сообщение от pornoborets
остается вопрос, насколько Ваш метод надежен, в плане кроссбраузерности

События они и в Африке события... :D А вот как их "повесить" на элементы уже другое дело. Считаешь, что так не кроссбраузерно - вешай подругому. Суть события от этого не поменяется.

ksa 09.06.2015 08:17

Цитата:

Сообщение от pornoborets
ТС'у надо было именно узнать значение поля до изменения

Ему показали как этого можно добиться.

Lecseus 05.11.2015 17:50

привет. надеюсь я не нарушая правила, создавая тут свой вопрос. столкнулся с проблемой: есть вопрос, на который только два варианта ответа правильных. Если указываешь один правильный, другой неправильный пишет неверно! как и должен, но стоит мне отметить checkbox, который правильный и тогда пишет верно! но один checkbox из трех неверно отмечен, а все равно пишет верно! не подскажете, где ошибка?
вот код
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
	<meta http-equiv="Content-Type" content="text/html;  charset=utf-8">
	<link rel="stylesheet" type="text/css" href="style2.css">
	<title>Вопросы</title>

<script type="text/javascript">
var correct = 0;
	
	function kontroll3(){
		var vastus=document.getElementsByName("v3"); //по имени радиокнопки name="#"
			if(vastus[1].checked && vastus[5].checked){ // вписывает индекс ответа, счет с 0
				document.getElementById("otvet3").innerHTML="верно";
				document.getElementById("otvet3").style.color="green";
				correct++;
			}
			else{
				document.getElementById("otvet3").innerHTML="неверно";
				document.getElementById("otvet3").style.color="red";
			}
	};
	
</script>					
</head>
	<body>
	
	
	<form action="#">Что не включается в математическую модель коммуникации?
		<br>
		<input type="checkbox" name="v3" value="v19"> <!--value - значение, которое будет отправлено на сервер-->
		источник информации
		<br>
		<input type="checkbox" name="v3" value="v20">
		передатчик
		<br>
		<input type="checkbox" name="v3" value="v21">
		ответчик
		<br>
		<input type="checkbox" name="v3" value="v22">
		канал связи
		<br>
		<input type="checkbox" name="v3" value="v22a">
		приемник
		<br>
		<input type="checkbox" name="v3" value="v22b">
		кондуктор
		<br>
		<input type="checkbox" name="v3" value="v22c">
		место назначения
		<br>
		<input type="button" value="check" onClick="kontroll3();">
		<div id="otvet3"> Ответ </div>
		<br>
		<a href="#">Помощь</a>
	</form>
	
<br>	
<br>	
</body>
</html>

рони 05.11.2015 18:18

придётся вам в условие и все остальные checkbox добавить && !vastus[0].checked ...
можно ещё тут помедитировать
http://javascript.ru/forum/misc/5324...tml#post353762

Lecseus 05.11.2015 18:27

да, я тоже так решил делать, но их что-то много ситуаций тогда писать надо.. а никак покороче не сделать чтоли, ну например если ТОЛЬКО 0 и 5 отмечены?

рони 05.11.2015 18:31

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

Lecseus 05.11.2015 18:36

жесть. неужели в JS нельзя прописать только когда 1 и 3 чекбоксы, никак иначе..
циклом попробую конечно, но неужто нету вариантов?

рони 05.11.2015 18:42

Цитата:

Сообщение от Lecseus
только

а как узнать это только уже или ещё не только или больше только, не заглядывая в нетолько? :lol:

Lecseus 10.11.2015 13:09

скажите пожалуйста, реально ли использовать в JavaScript метод switch case с чекбоксами, ну например, если там 1 и 3 отмечены: такое-то действие; если 1 и 2 и 3 отмечены:такое-то?
вообще насколько это реально?

ksa 10.11.2015 13:20

Цитата:

Сообщение от Lecseus
метод switch case с чекбоксами

Пример челе тестовый сделай...

Lecseus 10.11.2015 13:29

function kontroll(){
		var vastus=document.getElementsByName("v1"); //по имени радиокнопки name="#"
			if(vastus[0].checked && vastus[1].checked && vastus[3].checked){ // вписывает индекс ответа, счет с 0
				document.getElementById("otvet1").innerHTML="верно";
				document.getElementById("otvet1").style.color="green";
				correct++;
				
			}
			if(vastus[0].checked && vastus[1].checked && vastus[2].checked && vastus[3].checked){
				document.getElementById("otvet1").innerHTML="неверно";
				document.getElementById("otvet1").style.color="red";
			}
			if(vastus[0].checked && !vastus[1].checked && !vastus[2].checked && !vastus[3].checked){
				document.getElementById("otvet1").innerHTML="неверно";
				document.getElementById("otvet1").style.color="red";
			}
			if(!vastus[0].checked && vastus[1].checked && !vastus[2].checked && !vastus[3].checked){
				document.getElementById("otvet1").innerHTML="неверно";
				document.getElementById("otvet1").style.color="red";
			}
			if(!vastus[0].checked && !vastus[1].checked && !vastus[2].checked && vastus[3].checked){
				document.getElementById("otvet1").innerHTML="неверно";
				document.getElementById("otvet1").style.color="red";
			}
			if(vastus[0].checked && vastus[1].checked && !vastus[3].checked){
				document.getElementById("otvet1").innerHTML="неверно";
				document.getElementById("otvet1").style.color="red";
			}
			if(vastus[0].checked && vastus[3].checked && !vastus[1].checked && !vastus[2].checked){
				document.getElementById("otvet1").innerHTML="неверно";
				document.getElementById("otvet1").style.color="red";
			}
			if(vastus[1].checked && vastus[3].checked && !vastus[0].checked){
				document.getElementById("otvet1").innerHTML="неверно";
				document.getElementById("otvet1").style.color="red";
			}
			if(!vastus[0].checked && !vastus[1].checked && !vastus[2].checked && !vastus[3].checked){
				document.getElementById("otvet1").innerHTML="неверно";
				document.getElementById("otvet1").style.color="red";
			}
	};

допустим

рони 10.11.2015 14:20

Lecseus,
макет это когда можно жмакнуть и увидеть или не увидеть результат
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>

<body>
<input type="checkbox" name="v1">
<input type="checkbox" name="v1">
<input type="checkbox" name="v1">
<input type="checkbox" name="v1">
<input name="" type="button" value="проверить" onclick="kontroll()">
<p  id="otvet1"></p>
<script>  var correct = 0;

function kontroll() {
    var otv = document.getElementById("otvet1"),
        vastus = document.getElementsByName("v1"),
        answer = [1, 1, 0, 1];
    answer = answer.every(function(check, i) {
        return check == vastus[i].checked
    })
    otv.innerHTML = answer ? "верно" : "неверно";
    otv.style.color = answer ? "green" : "red";
    answer && correct++;

};
</script>
</body>

</html>

ksa 10.11.2015 14:25

Цитата:

Сообщение от Lecseus
допустим

Не совсем понятно зачем все остальные "условия", если все они неправильные? :blink:

Все это запросто меняется на

function kontroll(){
	var vastus=document.getElementsByName("v1"); //по имени радиокнопки name="#"
	if(vastus[0].checked && vastus[1].checked && vastus[3].checked){ // вписывает индекс ответа, счет с 0
		document.getElementById("otvet1").innerHTML="верно";
		document.getElementById("otvet1").style.color="green";
		correct++;
		return;
	};
	document.getElementById("otvet1").innerHTML="неверно";
	document.getElementById("otvet1").style.color="red";
};

рони 10.11.2015 14:38

Цитата:

Сообщение от ksa
Все это запросто меняется на

:nono:

ksa 10.11.2015 15:07

рони, чего я там пропустил? :blink:

рони 10.11.2015 15:09

Цитата:

Сообщение от ksa
if(vastus[0].checked && vastus[1].checked && !vastus[2].checked&& vastus[3].checked)

:) все тогда должны проверятся
Цитата:

Сообщение от рони
answer = [1, 1, 0, 1];


ksa 10.11.2015 15:14

рони, в любом случае у него правильная комбинация только одна.
Делать столько проверок на "неправильность" нет смысла... :)

рони 10.11.2015 15:18

Цитата:

Сообщение от ksa
в любом случае у него правильная комбинация только одна.

да но полная правильная :)

ksa 10.11.2015 15:25

рони, я просто переделал его последний пример... :D
На само условие не смотрел. :no:

Lecseus 10.11.2015 17:04

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

Lecseus 10.11.2015 17:18

рони, не могли бы мне объяснить, каким образом тут массив связывается:
answer = [1, 1, 0, 1];

тут
answer = answer.every(function(check, i) {
 return check == vastus[i].checked
})
если я правильно понимаю, вложенная функция, которая возвращает выбор. Но откуда тут every, это такая встроенная функция какая-то? Можете прокомментировать ваш код? и отчего у вас запятые вместо ";"?
как я это понял: задается массив, который потом проверяется и значение отмеченной коробки сверяется с индексом в массиве и только при таком раскладе выдает "верно", так? но я все-таки не понимаю, каким образом переменной, которая как массив передается далее функция и все остальное, не понимаю..
otv.innerHTML = answer ? "верно" : "неверно";
- это просто краткая запись условия if, если true то берется то, что до двоеточия, правильно я понимаю?
не понимаю, что значит
answer && correct++;


и ещё, объясните, как делать макет, чтобы в следующий раз не ошибиться?

рони 10.11.2015 17:51

Цитата:

Сообщение от Lecseus
как делать макет,

сделать министраницу со всем необходимым и заключить в теги
[HTML run][/HTML]

о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

рони 10.11.2015 17:57

Lecseus,
every
оператор-вопросительный-знак
Не используйте && вместо if

рони 10.11.2015 18:02

Цитата:

Сообщение от Lecseus
отчего у вас запятые

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

Lecseus 10.11.2015 18:03

рони,
спасибо. изучаю

Lecseus 10.11.2015 18:10

про запятые понял.
и все-таки про то, что написано answer И correct++; не понял. correct++ понимаю, но при чем тут стоит answer.
про every понял, только что значит return check == vastus[0].checked; ну так, туманно понимаю.. тоесть в заданный параметр в скобках функции check приравнивается действие о клике на checkbox. так?

рони 10.11.2015 18:27

Lecseus,
было answer = [1, 1, 0, 1];
крекс фекс пекс

answer = answer.every(function(check, i) {


return check == vastus[i].checked


})
стало скажем answer = true (или false)
answer && correct++;
перевод с этрусского
if(answer == true)correct++;
перевод на русский
если ответ правильный плюсуем единичку :)
если иначе то нефига не делаем

рони 10.11.2015 18:33

Lecseus,
check(любое имя) это перечисляемый элемент массива 1 или 0 тут [1, 1, 0, 1]; каждый элемент массива сравнивается с соотвествующим состоянием чекбокса

Lecseus 10.11.2015 18:36

Цитата:

Сообщение от рони (Сообщение 395554)
Lecseus,
check(любое имя) это перечисляемый элемент массива 1 или 0 тут [1, 1, 0, 1]; каждый элемент массива сравнивается с соотвествующим состоянием чекбокса

спасибо. а для чего там рядом с check в скобке i стоит?

Lecseus 10.11.2015 18:37

Цитата:

Сообщение от рони (Сообщение 395553)
Lecseus,
было answer = [1, 1, 0, 1];
крекс фекс пекс

answer = answer.every(function(check, i) {


return check == vastus[i].checked


})
стало скажем answer = true (или false)
answer && correct++;
перевод с этрусского
if(answer == true)correct++;
перевод на русский
если ответ правильный плюсуем единичку :)
если иначе то нефига не делаем

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


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