javascript初心者です。よろしくお願い致します。現在チェックボックスを使用したクイズサイトを作成しており、回答が5つの中から正しいものをチェックし送信するというものです。
その中で、正解数(今回は2つ)以上にチェックをした時に最初にチェックした方のチェックボックスのチェックが外れるという仕組みを組み込む事になりました。
選択数に制限をかけることや排他処理(ラジオボタン)は理解できるのですが、上記の実現方法がどうしても分からず質問させていただきました。
どうかよろしくお願い致します。
<html>
<head>
<script type="text/javascript">
function check(f,o,m){
var c = i = 0, b = f.elements;
for (i; i < b.length; i++)
if(b[i].type&&b[i].type=='checkbox'&&b[i].checked&&b[i].parentNode.id==o)
c++;
for (i = 0; i < b.length; i++)
if(b[i].type&&b[i].type=='checkbox'&&!b[i].checked&&b[i].parentNode.id==o)
b[i-2].checked=false;// これだと2つ前ではなく2番目のチェックボックスが排他になります。
}
</script>
</head>
<body>
<form action="#" id="sampleform" onclick="check(this,'options',2);">
<fieldset id="options"><input type="checkbox" name="" value=""><br>
<input type="checkbox" name="" value=""><br>
<input type="checkbox" name="" value=""><br>
<input type="checkbox" name="" value=""><br>
<input type="checkbox" name="" value=""><br>
<input type="checkbox" name="" value=""><br>
</fieldset>
</form>
</body>
</html>
No.1
- 回答日時:
私の理解がまちがっていたらごめんなさい。
5設問中2つ答えていいという意味であればこんな感じ
<script>
function check(o){
var c=0;
var f=o.form;
for (i=0; i < f.length; i++){
if(f[i].type && f[i].type=='checkbox' && f[i].checked==true) c++;
}
for (i=0; i < f.length; i++){
if(f[i].type && f[i].type=='checkbox' && f[i].checked==false) f[i].disabled=(c>=2);
}
}
</script>
<form>
<fieldset id="options">
<input type="checkbox" name="" value="" onclick="check(this);">1<br>
<input type="checkbox" name="" value="" onclick="check(this);">2<br>
<input type="checkbox" name="" value="" onclick="check(this);">3<br>
<input type="checkbox" name="" value="" onclick="check(this);">4<br>
<input type="checkbox" name="" value="" onclick="check(this);">5<br>
</fieldset>
</form>
単純にラジオボタン風に処理したいならこんな感じ
<script>
function check(o){
var f=o.form;
for (i=0; i < f.length; i++){
if(f[i].type && f[i].type=='checkbox' && f[i]!=o) f[i].checked=false;
}
}
</script>
<form>
<fieldset id="options">
<input type="checkbox" name="" value="" onclick="check(this);">1<br>
<input type="checkbox" name="" value="" onclick="check(this);">2<br>
<input type="checkbox" name="" value="" onclick="check(this);">3<br>
<input type="checkbox" name="" value="" onclick="check(this);">4<br>
<input type="checkbox" name="" value="" onclick="check(this);">5<br>
</fieldset>
</form>
No.2ベストアンサー
- 回答日時:
>最初にチェックした方のチェックボックスのチェックが外れるという仕組み
というためには、チェックした順番を記憶しておく必要があります。
ごく簡単な例
* 必ずfieldsetでグループ化されていると仮定しています(要id)
* 初期状態は全てチェックがクリアされていると仮定
(チェック状態でリロードしたりする場合は、修正の要あり)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head><title>sample</title>
<meta http-equiv="Content-Script-Type" content="text/javascript">
<script type="text/javascript">
<!--
function checker(evt, max){
var t = evt.target || evt.srcElement;
if (t.nodeName != "INPUT" || t.type != "checkbox") return;
var lng, rec, i, p = t.parentNode;
if (p.nodeName != "FIELDSET" || !p.id) return;
if (undefined == this.record) this.record = {};
if (!this.record[p.id]) this.record[p.id] = [];
rec = this.record[p.id], lng = rec.length;
if (t.checked){
rec.push(t);
if (lng >= max) rec.shift().checked = false;
} else {
for (i=0; i<lng; i++){
if (t == rec[i]) {rec.splice(i, 1); break; }
}
}
}
//-->
</script>
</head>
<body>
<form>
<fieldset id="options" onclick="checker(event, 2)">
<input type="checkbox" name="" value="1">1<br>
<input type="checkbox" name="" value="2">2<br>
<input type="checkbox" name="" value="3">3<br>
<input type="checkbox" name="" value="4">4<br>
<input type="checkbox" name="" value="5">5
</fieldset>
<fieldset id="options1" onclick="checker(event, 3)">
<input type="checkbox" name="" value="1">6<br>
<input type="checkbox" name="" value="2">7<br>
<input type="checkbox" name="" value="3">8<br>
<input type="checkbox" name="" value="4">9<br>
<input type="checkbox" name="" value="5">10
</fieldset>
</form>
</body>
</html>
ありがとうございます。まさに上記のような動作を考えておりました。配列のレコードを使用するのですね、複雑そうですが、勉強させていただきます。
本当にありがとうございました。
No.3
- 回答日時:
そんなのひるめしまえだぁ~! とおもったら、すぎていた。
Firefox ならうごくと・・・
ぜんかくくうはくは、はんかくにしてちょ。
<!DOCTYPE html>
<title></title>
<body>
<form action="#" id="hoge">
<p id="hoge" onclick="hogeCheck(event)">
<input type="checkbox">
<input type="checkbox">
<input type="checkbox">
<input type="checkbox">
<input type="checkbox">
<p>
<p id="huga" onclick="hugaCheck(event)">
<input type="checkbox">
<input type="checkbox">
<input type="checkbox">
<input type="checkbox">
<input type="checkbox">
<p>
</form>
<script type="application/javascript;version=1.8">
function ExclusiveCheckboxChecker (group, length) {
var buffer = [];
return function (evt) {
var checkbox = evt.target;
var checkboxs = group.querySelectorAll ('input[type="checkbox"]');
var func = function (b) b !== checkbox;
checkbox.checked
? Array.every (buffer, func)
? (buffer.push (checkbox), (length < buffer.length))
? (buffer.shift ()).checked = false
: null
: null
: buffer = buffer.filter (func);
}
}
var hogeCheck = ExclusiveCheckboxChecker (document.querySelector('#hoge'), 2);
var hugaCheck = ExclusiveCheckboxChecker (document.querySelector('#huga'), 3);
</script>
No.4
- 回答日時:
#3です。
ひるめしたべてながめたら、みすはっけん!function ExclusiveCheckboxChecker (group, length) {
var buffer = [];
return function (evt) {
var checkbox = evt.target;
var checkboxs = group.querySelectorAll ('input[type="checkbox"]');
var func = function (b) b !== checkbox;
'checked' in checkbox
? checkbox.checked
? buffer.every (func)
? (buffer.push (checkbox), (length < buffer.length))
? (buffer.shift ()).checked = false
: null
: null
: buffer = buffer.filter (func)
: null;
}
}
evt.target が、かならずしも checkbox とはかぎらない。これだと radio もとおるけど、そこはそれ・・・
buffer.every (func) も、ちょっとへんこう。(ちょっとfujillinさんに近いか?)
No.5
- 回答日時:
#3,4 です
あれこれ、ごしてきをうけました。
さて、
click イベントだけ、みるのは、ふじゅうぶんだそうです。きぼーどからだとやりほうだい。
そもそも、さいだいすうをこえたときに、けいこくをはっするのがとくさく。
にゅうりょくちをプログラムがわであんいにへんこうしてはならないとのこと。
しか~し、HTMLにも、もんだいがあったので、さいあっぷ。
<!DOCTYPE html>
<title></title>
<body>
<form action="#">
<p id="hoge" onclick="hogeCheck(event)" onchange="hogeCheck(event)">
<input type="checkbox">
<input type="checkbox">
<input type="checkbox">
<input type="checkbox">
<input type="checkbox">
</p>
<p id="huga" onclick="hugaCheck(event)" onchange="hogeCheck(event)">
<input type="checkbox">
<input type="checkbox">
<input type="checkbox">
<input type="checkbox">
<input type="checkbox">
</p>
</form>
<script type="application/javascript;version=1.8">
function ExclusiveCheckboxChecker (group, length) {
var checkboxs = group.querySelectorAll ('input[type="checkbox"]:checked');
var buffer = [];
Array.forEach (checkboxs, function (c) {
(buffer.length < length)
? buffer.push (c)
: c.checked = false
});
return function (evt) {
var checkbox = evt.target;
var func = (function (b) b !== checkbox);
('checked' in checkbox)
? (checkbox.checked)
? (buffer.every (func))
? let (d = buffer.push (checkbox))
(length < buffer.length)
? (buffer.shift ()).checked = false
: null
: null
: buffer = buffer.filter (func)
: null;
}
}
var hogeCheck = ExclusiveCheckboxChecker (document.querySelector('#hoge'), 2);
var hugaCheck = ExclusiveCheckboxChecker (document.querySelector('#huga'), 3);
</script>
No.6
- 回答日時:
>その中で、正解数(今回は2つ)以上にチェックをした時に最初にチェックした方のチェックボックスのチェックが外れるという仕組みを組み込む事になりました。
どの順番でチェックしたかというのを変数(バッファ)に保存しておいて、
2つ以上チェックされたら、そのバッファの古い方からチェックを外していく、という考え方で良いと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP $_SESSIONについて教えて下さい。 2 2023/03/02 09:18
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【jsp/Java】チェックボックス...
-
チェックボックスが複数ある場...
-
javascript checkbox
-
グループ別けされたチェックボ...
-
チェックボックスのON/OFFでVal...
-
チェックボックスのON/OFFに応...
-
オフになっているチェックボッ...
-
選択したラジオボタンが画面の...
-
チェックボックスをクリックし...
-
Javascript ポップアップウィ...
-
一つのチェックボックスのON/OF...
-
JSP内で可変するチェックボック...
-
特定のID(またはクラス)で括ら...
-
checkboxの選択数制限と排他処...
-
チェックボックスのvalueの取得...
-
背景色を変えて未入力チェック...
-
javascriptでチェックボックス...
-
javascriptで入力フォームが空...
-
return trueとreturn falseの用...
-
データベースの値を判断してラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【jsp/Java】チェックボックス...
-
チェックボックスのON/OFFでVal...
-
チェックボックスのON/OFFに応...
-
複数のチェックボックス項目が...
-
checkboxをクリックしてリロー...
-
チェックボックスの設定
-
チェックボックスで指定したも...
-
フォームのチェックボックスの...
-
チェックボックス
-
一つのチェックボックスのON/OF...
-
配列のチェックボックスをjavas...
-
チェックボックスが複数ある場...
-
チェックボックスに連動するテ...
-
スクリプト内でチェックボック...
-
特定のID(またはクラス)で括ら...
-
<input type="checkbox" checke...
-
チェックボックスに全てチェッ...
-
EclipseでSpringを使用し、テー...
-
Nameは配列で、チェックされた...
-
チェックボックスとラジオボタ...
おすすめ情報