Вкладки с помощью onclick активируют другой стиль CSS и показывают его конкретное содержимое

0

Я очень новичок во всех Java/JQuery, но для своего сайта я хочу его использовать.

Вот эта проблема; Я пытаюсь сделать какую-то причудливую навигацию в стиле табуляции. Дело в том, что если я использую "onclick" в HTML5, он не будет делать больше одного действия.

Что у меня есть:

HTML/JAVA/CSS:

    <!-- this are the buttons to press for showing content. -->

        <div id="MENU1" class="active" onclick="showHide('1');"><center>1</center></div>
        <div id="MENU2" class="inactive" onclick="showHide('2');"><center>2</center></div>
        <div id="MENU3" class="inactive" onclick="showHide('3');"><center>3</center></div>
        <div id="MENU4" class="inactive" onclick="showHide('4');"><center>4</center></div>

        <div id="CONTAINER">
        <!-- here should appear text -->
        <div id="CONTENT1">here somehow wil appear content 1</div>
        <div id="CONTENT2">here somehow wil appear content 2</div>
        <div id="CONTENT3">here somehow wil appear content 3</div>
        <div id="CONTENT4">here somehow wil appear content 4</div>
        </div>

    <script type="text/javascript"> 
    function showHide(divId){
        var theDiv = document.getElementById(divId);
        if(theDiv.style.display=="none"){
            theDiv.style.display="block";
        }else{
            theDiv.style.display="none";
        }    
    }
    </script>


<!-- the style of the buttons have to change from .inactive to .active -->
    <style>
    .active{
        color:#FF6a00;
        background-image:url(images/blackbck.png);
        background-repeat:round;
        background-size:cover;
    }

    .inactive{
        color:black;
        background-image:url(images/orangebck.png);
        background-repeat:round;
        background-size:cover;
    }
    </style>

Может ли кто-нибудь помочь мне в этом?

Резюме:

  • Кнопки должны менять стили.
  • Содержимое должно появиться, нажав кнопку.
  • Нажав на другую кнопку, старый контент должен быть скрыт.
  • 1
    К вашему сведению, Java полностью отличается от Javascript.
  • 0
    Вы хотите изменить стиль нажатия кнопки ??

6 ответов

1

Css для активных

.active{ color:#FF6a00!important; background-image:url(images/blackbck.png)!important; background-repeat:round; background-size:cover; }

Сначала добавьте библиотеку jQuery в начало

<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>

Добавить класс во все содержимое, как это:

<div id="CONTENT1" class="content">here somehow wil appear content 1</div>

Удалите onclick для всех div и добавьте кнопку класса:

<div id="MENU1" class="active inactive button"><center>1</center></div>

Попробуйте это:

<script>
$(document).ready(function(){
    $('.content').css('display','none');
    $('#CONTENT1').css('display','');
    $('#MENU1').click(function(){
        $('.button').removeClass('active');            
        $(this).addClass('active');
        $('.content').fadeOut(300);
        $('#CONTENT1').fadeIn(300);
    });
    $('#MENU2').click(function(){
        $('.button').removeClass('active');            
        $(this).addClass('active');
        $('.content').fadeOut(300);
        $('#CONTENT2').fadeIn(300);
    });
    $('#MENU3').click(function(){
        $('.button').removeClass('active');            
        $(this).addClass('active');
        $('.content').fadeOut(300);
        $('#CONTENT3').fadeIn(300);
    });
    $('#MENU4').click(function(){
        $('.button').removeClass('active');            
        $(this).addClass('active');
        $('.content').fadeOut(300);
        $('#CONTENT4').fadeIn(300);
    });
});    

С эффектами fadeIn/Out. Если вы не хотите менять.css('display', 'none')/.css('display', '')

  • 0
    может быть, вы проверите это еще раз ... скрыть .content недостаточно ... $('.content').find("div").hide();
  • 0
    Это кажется правильным, но сначала показывает весь контент.
Показать ещё 11 комментариев
0

Просто добавьте эту строку после function showHide(divId) {:

var divId = 'CONTENT'+divId;

JSFIDDLE

0

В соответствии с тем, что я понял,

ОБНОВЛЕННАЯ ДЕМОГРАФИЯ JSFIDDLE

HTML

<button id="MENU1" class="active" onclick="showHide('1');"><center>1</center></button>
        <button id="MENU2" class="inactive" onclick="showHide('2');"><center>2</center></button>
        <button id="MENU3" class="inactive" onclick="showHide('3');"><center>3</center></button>
        <button id="MENU4" class="inactive" onclick="showHide('4');"><center>4</center></button>

        <div id="CONTAINER"></div>

JS

function showHide(divId){
    $("button").removeClass("active");
    var id = "MENU" + divId;
    var theDiv = document.getElementById(id);
      $(theDiv).addClass("active"); 

    var data = "<div id='CONTENT'" + divId + ">here somehow wil appear content " + divId + "</div>";
    var print = document.getElementById("CONTAINER");
    print.innerHTML = data;   
}
  • 0
    Пожалуйста, смотрите обновленную демо-версию. Думаю, ваша проблема решена, иначе поправьте меня.
0

Как указывали другие ребята, ваша первая проблема здесь:

var theDiv = document.getElementById(divId);

это должно быть скорее:

var theDiv = document.getElementById("CONTENT" + divId);

вы передаете только "1" функции showHide, а затем вы используете document.getElementById для поиска элемента с идентификатором = "1", вместо ID = "CONTENT1",

Во-вторых - и то, что другие парни не отметили! , блок else {} не будет делать то, что вы ожидаете от него, - он просто скроет div с divId, а не все остальные divs. Ваша функция исправлена:

function showHide(divId){

    //getting all content divs
    var divs = document.getElementById("CONTAINER").childNodes;
    //iterating each of the content divs
    for(var i = 0; i < divs.length; i++){
        //getting id of a current div
        var currentId = divs[i].getAttribute('id'); 
        //if the id fits we want to show the div
        if(currentId === "CONTENT" + divId ){
            divs[i].style.display="block";
        }else{ //otherwise hide it
            divs[i].style.display="none";
        }
    }
}

Середине, что я не занимался изменением стиля здесь. Жоао Пауло дал правильный ответ, но он включает jQuery.

Оффтопик:

Вместо использования тега CENTER всегда используйте стили! В твоем случае:

#MENU1, #MENU2, #MENU3, #MENU4{
text-align: center
}
0

У вас есть ошибка в коде, вы передаете '1' функции showHide(), а затем с помощью document.getElementById('1'); нет элемента html с этим id, попробуйте передать идентификатор содержимого div, который вы хотите показать.

<div id="MENU1" class="active" onclick="showHide('CONTENT1');"><center>1</center></div>

или сделать что-то подобное.

<div id="MENU1" class="active" onclick="showHide('1');"><center>1</center></div>

то в вашей функции javascript сделайте это.

var theDiv = document.getElementById('CONTENT'+divId);
if(theDiv.style.display=="none"){
    theDiv.style.display="block";
} else{
    theDiv.style.display="none";
}   
0

вы можете сделать это также так:

//HTML
<div data-tab="1" id="MENU1" class="tab-navi active" onclick="showHide('1');"><center>1</center></div>
<div data-tab="2" id="MENU2" class="tab-navi" onclick="showHide('2');"><center>2</center></div>

<div id="CONTAINER">
    <!-- here should appear text -->
    <div class="tab-content" id="CONTENT1">here somehow wil appear content 1</div>
    <div class="tab-content"  id="CONTENT2">here somehow wil appear content 2</div>
</div>
//JQUERY
$("div.tab-navi").on("click", function(){
    var $this = $(this);
    var id = $this.attr("data-tab");
    $("div.tab-content").hide(); //Hide all
    $(".tab-navi").removeClass("active");
    $("#CONTENT"+id).show();
    $this.addClass("active");
});
//CSS
.tab-navi.active{
    color:#FF6a00;
    background-image:url(images/blackbck.png);
    background-repeat:round;
    background-size:cover;
}

.tab-navi{
    color:black;
    background-image:url(images/orangebck.png);
    background-repeat:round;
    background-size:cover;
}

здесь скрипка: http://jsfiddle.net/bs8gG/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню