2015-10-02 4 views
0

У меня есть div, который должен скрываться при нажатии. Затем, если вы нажмете на него снова, он покажет себя. Затем, если вы снова нажмете на него, он снова спрячется, и так далее и т. Д.Скрытие и отображение div с помощью jQuery

Когда он щелкнут в первый раз, он проверяет, истинна ли переменная $ visible или нет. Если $ visible истинно, оно скроет его, а затем установите значение $ visible равным null. Else, если $ visible не соответствует действительности, он покажет его, а затем установите значение $ visible равным true. Но по какой-то причине это не будет сделано.

Я уверен, что я сделал что-то неправильно, поэтому, пожалуйста, посмотрите на мой код:

<div id="id">Hello</div> 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
<script type="text/javascript"> 
    //************************************************************* 
    function hideOnClick($id) { 
    $("#" + $id).click(function() { 
     $(this).hide(); 
    }); 
    } 

    function showOnClick($id) { 
    $("#" + $id).click(function() { 
     $(this).show(); 
    }); 
    } 

    //************************************************************* 

    $(document).ready(function() { 
    $id = "id"; 
    $visible = "true"; 

    $("#" + $id).click(function() { 
     if ($visible == "true") { 
     hideOnClick($id); 
     $visible = null; 
     } else { 
     showOnClick($id); 
     $visible = "true"; 
     } 
    }); //end of $("#"+$id).click(function()  
    }); //end of $(document).ready(function() 

    //************************************************************* 
</script> 

Результаты:

First click on div #id: Nothing happens. 
Second click on div #id: #id hides itself 
Third click on div #id: Nothing happens. Doesn't show itself again. 
Fourth click on div #id: Nothing happens. Doesn't show itself again. 
Fifth click on div #id: Nothing happens. Doesn't show itself again. 
And this continues on indefinitely... 
+1

, потому что она спрятана уже вы не можете нажать его больше. нажмите кнопку, где вы можете скрыть и показать div – guradio

+0

вот так http://jsfiddle.net/4nzcxzvm/ – guradio

+0

@Pekka Я хочу ударить себя прямо сейчас. Все это время я думал, что неправильно написал код. – jessica

ответ

2

Во-первых, позвольте мне сказать, что jQuery already has a feature for that, named .toggle.

Во-вторых, если вы скрываете div, его больше нет на вашей странице, поэтому вы не сможете щелкнуть по нему.

Итак, если вы хотите сделать это, вам нужно будет использовать CSS opacity: 0, или visibility: hidden. Например:

$(this).css('visibility', 'hidden'); // to hide 
$(this).css('visibility', 'visible'); // to show 
+0

Так что, если вы скрываете его с помощью jQuery, он больше не будет на странице, но если вы его скрываете с помощью css, он все равно будет на странице , просто невидимый? Проклятье! Я этого не знал. Я также не знал о функции переключения в jQuery. Мог бы сэкономить мне много неприятностей, а затем написать свою собственную функцию переключения с нуля, LOL. – jessica

+1

jQuery 'hide' /' show'/'toggle' также делает это с помощью CSS, но они используют свойство' display: none', и что он вообще не отображает ваш 'div'. Но когда вы используете 'visibility', div все еще существует, но это * transparent *. – Buzinas

+0

Ах. В этом есть смысл. Было бы неплохо, если бы они добавили третий параметр, чтобы скрыть/показать/переключиться, чтобы установить отображение на none или сделать прозрачность прозрачности. Ну что ж. – jessica

1

Вы можете использовать JQuery в тумблер класс:

$("#myID").click(function(){ 
     $("#myID").toggleClass("visible"); 
    }); 

Если у вас есть класс с именем видимым:

.visible{ 
    visibility: hidden; 
} 
+0

Вы, кажется, забываете ту часть, где вы снова показываете div, если вы нажмете на нее снова. – jessica

+0

hmm, я предположил, что toggleClass автоматически сделает это за вас. если есть класс «visible» и он не отображается, он будет удалять класс, видимый при щелчке, и сделать его видимым? – user2707389

+0

Ах. Так что же делает toggleClass? Если переключает стили этого класса. Я догадался. Виноват. >.> – jessica

1

Вы также можете сделать это без создания кнопки:

$(":not(#div)").click(function(){$('#div').show();}); 

вместо:

$("#div").click(function(){$('#div').show();}); 

скрыть часть:

 $("#div").click(function(){$(this).hide();}); 
+0

Где скрытая часть кода? – jessica

+0

Не нужно ли «не всегда сопровождать точку с запятой? – jessica

+0

No @jessica. Вы пробовали мой код? – Vance

Смежные вопросы