1. 程式人生 > >專案筆記:點選按鈕後使其保持點選時的狀態

專案筆記:點選按鈕後使其保持點選時的狀態

在Web開發時,有不少選項卡切換的例項,當點選一個選項卡時要使其一直保持點選時的狀態,直到點選下一個選項卡切換到另一個選項卡才改變按鈕顏色,之前在專案中有遇到這樣的問題,現在將幾種方法做一總結。

多個選項卡切換

1.使用原生JS切換style

給每一個按鈕新增一個點選事件,每個按鈕傳入函式的引數不一樣,JS中利用傳入的引數判斷是哪個按鈕發生點選事件,然後改變按鈕的style

<script type="text/javascript">

function buttonclick(t){
        if(t==1){
            document.getElementById("b1").style.background="#ff0000";
            document.getElementById("b2").style.background="#ffffff";
        }
        if(t==2){
            document.getElementById("b2").style.background="#ff0000";
            document.getElementById("b1").style.background="#ffffff";
        }
    }
</script>

<body>
<div class="main">
    <button id="b1" onclick="buttonclick(1)">button1</button>
    <button id="b2" onclick="buttonclick(2)">button2</button>
</div>
</body>

但是這種方法對於選項卡較多的不適用,程式碼太複雜,不推薦使用

2.JQuery取消當前選項卡的mouseout()和mouseover()事件

首先init()函式初始化button,

並且註冊按鈕點選事件。當有按鈕點選時首先初始化所有按鈕,然後改變被點選按鈕的css,因為click事件觸發的同時會觸發mouseover()和mouseout()事件,以至於當按鈕點選後不能保持點選時的狀態,所以在點選函式中取消被點選按鈕的mouseover()和mouseout()事件,這樣就可以達到效果。

<script type="text/javascript">
    $(function () {
        var init = function () {
            $(".main button").css("background", "");
            $(".main button").mouseover(function () {
                $(this).css("background", "#ff0000");
            })
                .mouseout(function () {
                    $(this).css("background", "");
                })
        };
        init();
        $(".main button")
            .click(function () {
                init();
                $(this).css("background", "#ff0000");
                $(this).unbind("mouseout");
                $(this).unbind("mouseover");
            });
    })

</script>

<body>
<div class="main">
    <button>button1</button>
    <button>button2</button>
    <button>button3</button>
</div>
</body>

在做這種方法的時候有考慮到是不是可以不用取消mouseover()和mouseout()事件,改變按鈕的disabled,但是這樣的話按鈕就會被禁用,不能達到指定的style。

3.setTable滑鼠懸浮/點選切換

為一組選項卡編號,setTab(id,cursel,n)函式切換選項卡的class,id為被點選選項卡的id,cursel為選項卡的編號,n為選項卡總數

<script type="text/javascript">    
    function setTab(name,cur,n)
    {
        for(i=1;i<=n;i++)
        {
            var menu=document.getElementById(name+i);
            menu.className=i==cur?"click":"";
        }
    }
</script>
<style type="text/css">
    .click{
        background-color: #ff0000;
    }
</style>

<body>
<div class="main">
    <button id="b1" onclick="setTab('b',1,3)">button1</button>
    <button id="b2" onclick="setTab('b',2,3)">button2</button>
    <button id="b3" onclick="setTab('b',3,3)">button3</button>
</div>
</body>

單個選項卡點選切換style

一個選項卡的切換不像一組選項卡切換那樣有參照物,所以得設定一個標記記錄選項卡的狀態

<script>

    var t=false;    //t記錄當前按鈕的狀態
    function buttonclick(){
       if(t==false)
       {
        document.getElementById("b1").className="bb1";
        t=true;
       }
       else{
        document.getElementById("b1").className="";
        t=false;
       }
    }
</script>
<style type="text/css">
    .bb1{
        background-color: #ff0000;
    }
</style>


<body>
<div class="managementPanel">
    <button id="b1" onclick="buttonclick()">div1</button>
</div>
</body>