checkbox решаем что делать
Привет всем. Что то я облазил поисковики и не нашел нормальной инфы.
У меня вопрос в следующем. Хотелось б все сделать на JS без Query. Есть <input type="checkbox" class="fl_select" iid="'.$row["id"].'" '.$fl_select.'/> Необходимо при клике определить стоит ли галочка или нет Это для того чтобы решить какой запрос выполнить. Пример кликнули по checkbox если стоит галочка высветилось сообщение стоит , если нет то сообщить что нет. И при сообщении сменить checkbox. Если он был включен то выключить потом , если выключен то включить. |
Цитата:
|
Цитата:
|
Цитата:
|
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>
|
С 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>
|
Endy,
То есть, Вы инвертируете, как-бы, значения. Но ведь, ТС'у надо было именно узнать значение поля до изменения. Получается, такого способа нет? И, остается вопрос, насколько Ваш метод надежен, в плане кроссбраузерности, и так далее. Ведь это, фактически, грязный хак, причем, извращенный, к тому же. |
ksa,
Спасибо, капитан. |
pornoborets,
Цитата:
Цитата:
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
привет. надеюсь я не нарушая правила, создавая тут свой вопрос. столкнулся с проблемой: есть вопрос, на который только два варианта ответа правильных. Если указываешь один правильный, другой неправильный пишет неверно! как и должен, но стоит мне отметить 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>
|
придётся вам в условие и все остальные checkbox добавить && !vastus[0].checked ...
можно ещё тут помедитировать http://javascript.ru/forum/misc/5324...tml#post353762 |
да, я тоже так решил делать, но их что-то много ситуаций тогда писать надо.. а никак покороче не сделать чтоли, ну например если ТОЛЬКО 0 и 5 отмечены?
|
Lecseus,
если интересуют все -- все и нужно обходить либо циклом что в примере выше, либо в условии перечислять все как у вас сейчас. |
жесть. неужели в JS нельзя прописать только когда 1 и 3 чекбоксы, никак иначе..
циклом попробую конечно, но неужто нету вариантов? |
Цитата:
|
скажите пожалуйста, реально ли использовать в JavaScript метод switch case с чекбоксами, ну например, если там 1 и 3 отмечены: такое-то действие; если 1 и 2 и 3 отмечены:такое-то?
вообще насколько это реально? |
Цитата:
|
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";
}
};
допустим |
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>
|
Цитата:
Все это запросто меняется на
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";
};
|
Цитата:
|
рони, чего я там пропустил? :blink:
|
Цитата:
Цитата:
|
рони, в любом случае у него правильная комбинация только одна.
Делать столько проверок на "неправильность" нет смысла... :) |
Цитата:
|
рони, я просто переделал его последний пример... :D
На само условие не смотрел. :no: |
мне у вас, рони, даже не хочется копировать.. ибо я не понимаю кода. но со switch case никак совсем?
да и спасибо большое, буду разбираться. |
рони, не могли бы мне объяснить, каким образом тут массив связывается:
answer = [1, 1, 0, 1]; тут
answer = answer.every(function(check, i) {
return check == vastus[i].checked
})
если я правильно понимаю, вложенная функция, которая возвращает выбор. Но откуда тут every, это такая встроенная функция какая-то? Можете прокомментировать ваш код? и отчего у вас запятые вместо ";"?как я это понял: задается массив, который потом проверяется и значение отмеченной коробки сверяется с индексом в массиве и только при таком раскладе выдает "верно", так? но я все-таки не понимаю, каким образом переменной, которая как массив передается далее функция и все остальное, не понимаю.. otv.innerHTML = answer ? "верно" : "неверно";- это просто краткая запись условия if, если true то берется то, что до двоеточия, правильно я понимаю? не понимаю, что значит answer && correct++; и ещё, объясните, как делать макет, чтобы в следующий раз не ошибиться? |
Цитата:
[HTML run][/HTML] о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
|
Цитата:
|
рони,
спасибо. изучаю |
про запятые понял.
и все-таки про то, что написано answer И correct++; не понял. correct++ понимаю, но при чем тут стоит answer. про every понял, только что значит return check == vastus[0].checked; ну так, туманно понимаю.. тоесть в заданный параметр в скобках функции check приравнивается действие о клике на checkbox. так? |
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++; перевод на русский если ответ правильный плюсуем единичку :) если иначе то нефига не делаем |
Lecseus,
check(любое имя) это перечисляемый элемент массива 1 или 0 тут [1, 1, 0, 1]; каждый элемент массива сравнивается с соотвествующим состоянием чекбокса |
Цитата:
|
Цитата:
|
| Часовой пояс GMT +3, время: 04:46. |