jQuery と html と css で複数選択可能なボタンを作る

タイトル通り、複数選択可能なボタンを作ろうと思い作成しました。

とりあえず、ボタンを押したら今押されているボタンのIDを取得して画面に表示させています。

※ 細かいバグがあるかも

■ index.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="content-language" content="ja">
        <link rel="stylesheet" type="text/css" href="button.css">
        <script src="https://code.jquery.com/jquery-3.1.1.slim.js"></script>
        <script src="button.js"></script>
        <title>ボタン</title>
    </head>
    <body>
        <div id="list_area" >
            <ul style="list-style-type: none">
                <!-- ここがボタンになる領域 -->
                <li id="id_1" class="list_item">ボタン1</li>
                <li id="id_2" class="list_item">ボタン2</li>
                <li id="id_3" class="list_item">ボタン3</li>
            </ul>
        </div>
        <div>選択中:<span id="check_item"></span></div>
    </body>
</html>

■ button.js

toggleClass を使いたかったんですよね。

$(function()
{
    // 定数用
    var CHECKED_CLASS = "checked" ;
    // 変数用
    var
      check_array = []
    , ltem_count  = 0
    , for_count   = 0
    , check_text  = ""
    , e_target    = []
    ;
    $(".list_item").on("click", function(e)
    {
        e_target = $(e.target) ;
        e_target.toggleClass(CHECKED_CLASS) ;
        // checked が付加されている項目の id を配列に追加、無い項目は配列から除去
        if(e_target.hasClass(CHECKED_CLASS)) {
            check_array.push(e_target.attr("id")) ;
        } else {
            for_count = 0 ;
            for(; for_count < ltem_count ; for_count++) {
                if(e_target.attr("id") == check_array[for_count]) {
                    check_array.splice(for_count, 1) ;
                }
            }
        }
        // 画面に選択されている項目を表示させる
        ltem_count = check_array.length ;
        for_count  = 0 ;
        check_text = "" ;
        for(; for_count < ltem_count ; for_count++) {
            // 最初の一つ目以外は前に , をつけて区切る
            if(for_count !== 0) check_text += ", " ;
            check_text += check_array[for_count] ;
        }
        $("#check_item").text(check_text) ;
    })
})

■ button.css

hover は辞めました。

@CHARSET "UTF-8" ;
.list_item
{
    margin : 2px ;
    padding : 5px 10px 5px 10px ;
    border-radius : 10px ;
    text-align : center ;
    background : #DDDDDD ;
    display : inline-block ;
}
.list_item:active
{
    background : #555555 ;
}
.checked
{
    color : #FFFFFF ;
    background : #888888 ;
}

そういえば、 jQuery が 3.1.1 にバージョンアップしましたね(今更)