質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • JavaScript

    16914questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Java

    14049questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • HTML

    9234questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

チェックボックスで複数チェックして残り1つになったら非活性にする方法

解決済

回答 2

投稿 ・編集

  • 評価
  • クリップ 0
  • VIEW 1,926

mucho0623

score 31

表題の件ですが、
例えば、5つのチェックボックスをチェックできるとして、
ランダムに4つチェックして、
残り1つになったら、
まだチェックしていないチェックボックスを非活性にして
選べなくするやり方を教えてほしいです。

ブラウザはIE10以上で動作すればOKです。
宜しくお願い致します。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

こんにちは。

たとえば、こんな感じでいかがでしょうか。

<html>
<head>
<title>sample</title>
<script language="JavaScript">
<!--
// チェックボックスに使用している名前
chn = new Array("ch1","ch2","ch3","ch4","ch5");
chc = 4; // チェックできる数
// チェックボックスにチェックできる数を制限する
function chBx(cn){
  cnt = 0;
  for(i=0; i<chn.length; i++) {
    if(document.nForm.elements[chn[i]].checked) cnt++;
  }
  if(cnt > chc) {
    alert("チェックできる項目は" + chc + "個までです");
    document.nForm.elements[cn].checked = false;
  }
}
//-->
</script>
</head>
<body>
4個までしかチェックできません。
<form name="nForm">
<INPUT type="checkbox" name="ch1" onClick="chBx('ch1')">チェックボックス1
<INPUT type="checkbox" name="ch2" onClick="chBx('ch2')">チェックボックス2
<INPUT type="checkbox" name="ch3" onClick="chBx('ch3')">チェックボックス3
<INPUT type="checkbox" name="ch4" onClick="chBx('ch4')">チェックボックス4
<INPUT type="checkbox" name="ch5" onClick="chBx('ch5')">チェックボックス5
</form>
</body>
</html>


使用方法
chn = new Array("ch1","ch2","ch3","ch4","ch5");
の部分で、チェックをする/はずすチェックボックスを設定します。
対応するチェックボックスのname属性を「,」で区切って追加してください。

<INPUT type="checkbox" name="ch1" onClick="chBx('ch1')">
については、onClick="chBx('ch1')"のch1はname属性に設定した値と同じにしてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/01/28 17:27

    迅速な対応頂きましてありがとうございます。
    とても参考になりました!

    4つ選んだ時点で、
    選んでない残りのチェックボックスを非活性にしたかったので
    下記のようにscriptタグの中を加工しました。

    ------------------------------------------------------------------------

    <script language="JavaScript">
    <!--
    // チェックボックスに使用している名前
    chn = new Array("ch1","ch2","ch3","ch4","ch5");
    chc = 4; // チェックできる数
    // チェックボックスにチェックできる数を制限する
    function chBx(cn){
    cnt = 0;
    for(i=0; i<chn.length; i++) {
    if(document.nForm.elements[chn[i]].checked) cnt++;
    }
    if(cnt == chc) {
    for(i=0; i<chn.length; i++) {
    if(!document.nForm.elements[chn[i]].checked) document.nForm.elements[i].disabled = true;
    }
    }
    }
    //-->
    </script>

    ------------------------------------------------------------------------

    あと、
    チェックできる数chcを(チェックボックスの数 ― 1)と可変にして、
    <html:multibox>で実装するようにするところです。

    ありがとうございました!

    キャンセル

  • 2015/01/28 17:34

    ≪追記≫

    上記ですと、
    一度非活性になったチェックボックスが
    他のチェックをキャンセルしたとき、
    元に戻らないので、非活性をなおす処理も入れました。

    -------------------------------------------------------------------------------------
    <script language="JavaScript">
    <!--
    // チェックボックスに使用している名前
    chn = new Array("ch1","ch2","ch3","ch4","ch5");
    chc = 4; // チェックできる数
    // チェックボックスにチェックできる数を制限する
    function chBx(cn){
    cnt = 0;
    for(i=0; i<chn.length; i++) {
    if(document.nForm.elements[chn[i]].checked) cnt++;
    }
    if(cnt == chc) {
    for(i=0; i<chn.length; i++) {
    if(!document.nForm.elements[chn[i]].checked) document.nForm.elements[i].disabled = true;
    }
    }else if(cnt < chc){
    for(i=0; i<chn.length; i++) {
    if(document.nForm.elements[i].disabled) document.nForm.elements[i].disabled = false;
    }
    }
    }
    //-->
    </script>
    -------------------------------------------------------------------------------------

    キャンセル

  • 2015/01/29 10:23

    mucho0623さん、コメント(返信)をいただきありがとうございます。
    僕の回答がすこしはお役に立てたようでなによりです。

    キャンセル

0

<!DOCTYPE html lang="ja">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<script>
// 最後の1個チェックすると、チェック外して非活性にする。
function checkLastOne(q, o) {

    var chks = document.querySelectorAll(q);
    
    var counter = 0;
    for (var i=0;i < chks.length;i++) {
        counter += chks[i].checked ? 1 : 0;
        chks[i].disabled = false;
    }
    
    window.status = counter + " // " + chks.length;

    if (counter == chks.length) {
        o.checked = false;
        o.disabled = true;
    }

}

// チェック可能なチェックボックスが最後の1個になったらチェックされてない
// やつを 非活性にしてしまう。
function disabledLastOne(q, o) {

    var chks = document.querySelectorAll(q);
    
    var nonChecked = [];
    for (var i=0;i < chks.length;i++) {
        if (!chks[i].checked) {
            nonChecked.push(chks[i]);
        }
        chks[i].disabled = false;
    }
    
    window.status = " // チェックされてない個数:" + nonChecked.length;

    if (nonChecked.length == 1) {
        nonChecked[0].checked = false;
        nonChecked[0].disabled = true;
    }

}

</script>
</head>
<body>

<p>チェックされたチェックBOXが最後の1個なら、チェックキャンセルして非活性にする</p>
<div id="A">
    <input type="checkbox" name="A1" value="1" class="chks" onclick="checkLastOne('#A .chks', this)" />
    <input type="checkbox" name="A2" value="2" class="chks" onclick="checkLastOne('#A .chks', this)" />
    <input type="checkbox" name="A3" value="3" class="chks" onclick="checkLastOne('#A .chks', this)" />
    <input type="checkbox" name="A4" value="4" class="chks" onclick="checkLastOne('#A .chks', this)" />
    <input type="checkbox" name="A5" value="5" class="chks" onclick="checkLastOne('#A .chks', this)" />
</div>
<hr />
<p>チェックされてないチェックBOXが最後の①個なら非活性にする</p>
<div id="B">
    <input type="checkbox" name="A1" value="1" class="chks" onclick="disabledLastOne('#B .chks', this)" />
    <input type="checkbox" name="A2" value="2" class="chks" onclick="disabledLastOne('#B .chks', this)" />
    <input type="checkbox" name="A3" value="3" class="chks" onclick="disabledLastOne('#B .chks', this)" />
    <input type="checkbox" name="A4" value="4" class="chks" onclick="disabledLastOne('#B .chks', this)" />
    <input type="checkbox" name="A5" value="5" class="chks" onclick="disabledLastOne('#B .chks', this)" />
</div>

</body>
</html>

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    Rails4から利用可能なビューヘルパーについて

    Rails4になってから利用可能になったビューヘルパーについてですが、どんなビューヘルパーが追加されたかご存知の方いますか? 知っている方いましたら教えてください。

  • 解決済

    なぜかオートコンプリート機能が正しく動きません。

    AndroidのBitmapクラスを使ってコーディングしているときにドットを入力するとなぜかBitmapクラスではなくObjectのメソッドをオートコンプリートで表示してきます。

  • 解決済

    C#でMySQLと接続しデータを数値として取得したい

    C#でMySQLと接続しデータを数値として取得したいです。 すごく初歩的な質問かもしれません。 SELECT文でデータを取得する(DataReader) (↑http://ok

  • 解決済

    Wordpressのズレについて。

    Wordpressのサイト作成について質問です。 当方、初心者ですのでわかりやすく教えていただけると幸いです。 トップページの記事一覧の各記事のタイトルについてです。 ・PC

  • 解決済

    [jQuery] 呼応する選択肢に色をつけたい

    前提・実現したいこと 現在jQueryを使ってアプリを作っています。 画面は下記のような状況です。 そこで質問があるのですが、 この上の選択肢を選んだ際にそ

  • 受付中

    複数のキーワードで検索させる

    複数のキーワードを入力することであるデータを検索するようにしたいのですがうまくいきません。 以下のプログラムで一つのキーワードで検索するとこまではできました。 <htm

  • 解決済

    [.java]ファイルがダブルクリックで開いてしまう

    本日、FileReaderクラスでファイルが読み込めない件について 相談させていただいていたのですが、 これで多分解決というところで、以下の事象に苦しんでいます。 自己解決が

  • 解決済

    【Xcode】フォルダが見えない

    急に出てきてわからない状態になりましたので、質問いたします 作業中に急に左にあるフォルダー、プログラムなどが入っているものが見える 場所があると思いますが (show t

同じタグがついた質問を見る

  • JavaScript

    16914questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Java

    14049questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • HTML

    9234questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。