2012-03-05 2 views
1

Есть кнопка (id = "hide_message_button") и сообщение (id = "message"). Щелчок по кнопке должен скрывать/показывать сообщение. Исходный код:Как показать/скрыть элемент DOM с помощью jQuery?

$('#hide_message_button').click(function(){ 
    var bool = $('#message').css('visibility','hidden').is(':hidden'); 
    if(bool){ 
     $('#message').show(); 
     $(this).val('Hide'); 
    } 
    else { 
     $('#message').hide(); 
     $(this).val('Show'); 
    } 
}); 

У меня есть ошибка: сообщение скрыто с первым нажатием на кнопке и не раз, не показано (а значение кнопки изменяется на «Show»). Что не так? Благодарю.

ответ

1

Try:

$('#hide_message_button').click(function(){ 
    $('#message').toggle(); 
}); 
+0

Отлично, он работает. Благодарю. –

2

Элементы с visibility: hidden свойствами стиля являются не скрыты, так как они занимают пространство в макете. Попробуйте:

var bool = $('#message').is(":hidden"); 

или:

var bool = $('#message:hidden').length; 

или:

var bool = $('#message').css("display") == "none"; 

От manual:

Элементы можно считать скрытым по нескольким причинам:

  • У них нет значения отображения CSS.
  • Это элементы формы с типом = «скрытые».
  • Их ширина и высота явно установлены в 0.
  • Элемент предка скрыт, поэтому элемент не отображается на странице.
+0

спасибо! Я пробовал все три варианта, и все трое работают абсолютно правильно. Это очень интересное решение с «длиной». –

0

Посмотрите на функцию toggle.

<input type="button" id="hide_message_button" value="My button" /> 
<p id="message">A message</p>​ 

и

$('#hide_message_button').click(function(){ 
    $('#message').toggle(); 
});​ 
+0

Я не понимаю, почему кнопка также исчезает, если вы просто переключили идентификатор '# message' ... – talnicolas

+0

Да, вы правы. Я писал перед чем-то другим.Этот код работает отлично. Благодарю. –

2

Это потому, что css('visibility','hidden') вызов скрывает сообщение, а затем он никогда не появится снова, потому что метод show не меняет visibility стиля.

Затем элемент будет переключаться между скрытием (display = block, visibility = hidden) и удалением (display = none, visibility = hidden). В одном состоянии элемент занимает пробел, но сообщение не отображается ни в одном из состояний.

Просто удалите код, который устанавливает стиль visibility, и код работает.

Демо: http://jsfiddle.net/Guffa/JqE3Y/

+0

Я думаю, что bool имеет также истинное значение, потому что значение кнопки изменяется при каждом нажатии «Показать» на «Скрыть» и наоборот. Я также тестировал его с предупреждающим сообщением, которое я вложил в блок «if». –

+0

@tatiana_c: Да, на самом деле. Я уже обновил свой ответ с более точным описанием и исправленным кодом. – Guffa

+0

Большое спасибо за демонстрацию и ответ. Это работает, и это здорово. –

1

Используйте переключатель вместо проверить видимость. Этот код работает: http://jsfiddle.net/8qu9y/

+0

Да, это работает, спасибо. –

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