0

タブの使用に問題がありました。たとえば、サイトhttp://mashable.comとしてタブ機能を実装しようとしました。

タブをホバーして、ホバーでタブのコンテンツを表示できます。タブをクリックすると、タブのコンテンツが非表示になり、until mouseleave が表示されなくなります<li>。もう一度マウス入力すると、タブの内容が表示されます。

ホバーとクリックの組み合わせに問題がありました。このコードには、次のような問題 が あり
ます 。ルールはありません。表示してはいけません - タブの内容が表示されていない場合、マウスを動かすと (私は mouseleave をしませんでした)、タブの内容が表示される場合と表示されない場合があります

<li>

<li>

HTML:

<div id="tabs">
    <ul id="tabstest">
        <li id="tab1" class="tab" onclick="location.href='\ttest1.php';"  style="cursor:pointer;"><strong>Test 1</strong></li>
        <li id="tab2" class="tab"> <a href="/Test/test2.php" class="tab_link" ><strong><br>Test 2</strong></a></li>
        <li id="tab3" class="tab"> <a href="/Test/test3.php" class="tab_link" ><strong>Test 3</strong></a></li>
        <li id="tab4" class="tab" onclick="location.href='\ttest4.php'; " style="cursor:pointer;" ><strong><br>Test 4</strong></li>
        <li id="tab5" class="tab"> <a href="/Test/test5.php" class="tab_link" ><strong><br>Test 5</strong></a></li>
        <li id="tab6" class="tab"> <a href="/Test/test6.php" class="tab_link" ><strong><br>Test 6</strong></a></li>
    </ul>
</div>
<div id="tabcontents">
    <div id="tab1content" class="tabcontent">
        <p>tab1 content</p>
    </div>  
    <div id="tab2content" class="tabcontent">
        <p>tab2 content</p>
    </div>   
    <div id="tab3content" class="tabcontent">
        <p>tab3 content</p>
    </div>
    <div id="tab4content" class="tabcontent">
        <p>tab4 content</p>
    </div>    
    <div id="tab5content" class="tabcontent">
        <p>tab5 content</p>
    </div>
    <div id="tab6content" class="tabcontent">
        <p>tab6 content</p>
    </div>
</div>

JQuery:

$(window).load(function(){
    $(".tab").focus(function() {
       var tabId = $(this).attr('id');
        $("#" + tabId + "content").hide();
   });  
    $(".tabcontent").focus(function() {
        $(this).hide();
    });
    $(".tab").click(function() {
       var tabId = $(this).attr('id');
        $("#" + tabId + "content").hide();
   });  
    $(".tabcontent").click(function() {
        $(this).hide();
    }); 
    $(".tab").mouseenter(function() {
        var tabId = $(this).attr('id');
        $("#" + tabId + "content").show();
   });
    $(".tabcontent").mouseenter(function() {
        $(this).show();
    });
    $(".tab").mouseleave(function() {
        var tabId = $(this).attr('id');
        $("#" + tabId + "content").hide();
    });
    $(".tabcontent").mouseleave(function() {
        $(this).hide();
    });
}); 
4

3 に答える 3

0

こんにちは、タブを使用する代わりに、ul li を作成し、li 内にコンテンツを配置する方が簡単です。div は li の子であることを非表示にしないため、hover() を使用します。

<div id="tabs">
<ul id="tabstest">
    <li id="tab1" class="tab" onclick="location.href='\ttest1.php';"  style="cursor:pointer;">
        <strong>Test 1</strong>
        <div id="tab1content" class="tabcontent">
            <p>tab1 content</p>
        </div>  
    </li>
    <li id="tab2" class="tab" <a href="/Test/test2.php" class="tab_link" >
        <strong><br>Test 2</strong></a>
        <div id="tab2content" class="tabcontent">
            <p>tab2 content</p>
        </div>   
    </li>
    <li id="tab3" class="tab" <a href="/Test/test3.php" class="tab_link" >
        <strong>Test 3</strong></a>
        <div id="tab3content" class="tabcontent">
            <p>tab3 content</p>
        </div>
    </li>
    <li id="tab4" class="tab" onclick="location.href='\ttest4.php'; " style="cursor:pointer;" >
        <strong><br>Test 4</strong>
         <div id="tab4content" class="tabcontent">
            <p>tab4 content</p>
        </div>    
    </li>
    <li id="tab5" class="tab" <a href="/Test/test5.php" class="tab_link" >
        <strong><br>Test 5</strong></a>
    </li>
    <li id="tab6" class="tab" <a href="/Test/test6.php" class="tab_link" >
        <strong><br>Test 6</strong></a>
    </li>
</ul>
</div>

jquery:

$(function(){
    $("#tabstest li").hover(function(){
        $(this).children("div").show();
    },function(){
        $(this).children("div").hide();
    });
});
于 2013-01-24T14:33:01.707 に答える
0

私はcssを投稿しませんでした.cssはdiv、ul、liなどの要素の問題を引き起こす可能性があります.

#tabs {

        width: 950px;

    }

    #tabs ul li a {
    display: block;
    }

    #tabs ul {
        padding: 0;
        margin: 0;
        list-style: none;
        display: block;
    }
    #tabs ul li {
        display: block;
        float: left;
        padding: 2.8px;
        margin: 0px;
        font-size: 15.5px;
        border-right:3px double #cccccc;
        background: #000000 url(/images/tab2.jpg) no-repeat 0px 0px;
        color:#ffffff; 
        text-align: center;
    }

    #tabs ul li:last-child { border-right: none;  }
    #tabs li:first-child + li + li + li + li  + li{border-right:none;}
    #tabcontents {
        clear: both;

    }

    .tabcontent {
        display: none;
        width: 947px;
        height:295px;
        background: #202020;
        position: absolute;
        color:#f0f0f0;
        z-index:9999;
    }


    a.tab_link{
        text-decoration:none;

    }

    a.tab_link:link { 
        color: #ffffff; 
    }

    a.tab_link:visited { 
        color: #f6911b; 
    }

    a.tab_link:hover {
        color: #eeeeee;
    }

    a.tab_link:active {
        color: #f6911b;
    }
于 2013-01-25T09:59:46.370 に答える
0

最初$(".tabcontent").hide()にページの読み込み時に追加して、デフォルトですべてのコンテンツが非表示になるようにします。それ以外には、「うまくいくときもあれば、うまくいかないときもある」バグは見つかりませんでした。あなたのコードは機能しますが、タブを離れるかクリックするとコンテンツが非表示になるため、マッシュ可能ではありません。

個人的には、div の基本構造は JavaScript から制御しやすいので、リストを避けるようにしています。必要なものを作成する方法はいくつかありますが、自分に最適なものを選択するのは開発者です。

Lesonaschi が言ったように、おそらく最良のオプションは、要素 (タブdivまたは内のコンテンツli) をネストすることです。これは、ホバー機能がブロック全体に適用される必要があるためです。しかし、私の言葉を鵜呑みにしないで、試してみてください :)

于 2013-01-25T07:46:02.237 に答える