jQuery show / hide / toggle работает, но не остается должным - PullRequest
4 голосов
/ 16 июля 2009

Я пытаюсь показать / скрыть ответы на часто задаваемые вопросы, используя jQuery. Идея состоит в том, что все вопросы перечислены, и только когда пользователь хочет увидеть ответ, он щелкает вопрос (который выглядит как ссылка), и тогда ответ становится видимым.

Это работает, за исключением того, что ответ возвращается в исходное состояние, как только он щелкает. В этом случае это означает, что когда я нажимаю на вопрос, чтобы показать ответ, он появляется и затем исчезает в следующий момент, а не остается видимым, пока не будет нажат снова, чтобы переключить его на скрытие.

Я вставил код ниже:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript" src="jquery-1.3.2.min.js" ></script>
<script>
    $(document).ready(function() {
        $('div.showhide,#answer').hide();
        $('#question').click(function(){
        $('div.showhide,#answer').toggle();
       });
  });
</script>
</head>
<body>
<p><a href="" id="question" name="question">Question</a></p><div id="answer"     name="answer">Answer</div></p>
</body>
</html>

Ответы [ 4 ]

5 голосов
/ 16 июля 2009

Я думаю, что может быть проблема с <a href=""> ... Если вы удалите атрибут href (поскольку он все равно не нужен (если вам нужен соответствующий курсор, используйте CSS)), он будет работать, по крайней мере, для меня .

Поскольку <a href=""> запускает событие onClick и обновляет страницу, вы можете заменить пустой атрибут href на href="#" или href="javascript:void(0) для запуска события js.

4 голосов
/ 16 июля 2009

Другим способом предотвращения поведения гиперссылки по умолчанию является использование event.preventDefault():

Запрещает браузеру выполнять действие по умолчанию.

Я бы предложил это:

$('#question').click(function(e){
    e.preventDefault();
    $('div.showhide,#answer').toggle()
});
2 голосов
/ 16 июля 2009

Хорошо, когда вы нажимаете на ссылку, вызывается событие onClick, и сразу после этого страница перезагружается, поскольку ссылка указывает на ту же страницу (href = ""), а браузер следует по ссылке.

Когда страница перезагружается, она возвращается в исходное состояние, скрывая ответ.

Чтобы избежать этого, вам нужно вернуть false в функцию, вызванную событием click, чтобы браузер не переходил по ссылке.

Подводя итог, сделайте ваш код похожим на:

$('#question').click(function(){
    $('div.showhide,#answer').toggle();
      return false;
   });

В качестве альтернативы, вы можете указать ссылку на функцию javascript. Затем вы удалите приведенный выше код, заменив его стандартной функцией javascript:

function showAnswer()
{
    $('div.showhide,#answer').toggle();
}

и ваша ссылка станет:

<a id="question" href="javascript:showAnswer();">

Но имейте в виду, что это не рекомендуется, поскольку клиент с отключенным javascript не сможет увидеть ответы. Вы должны всегда иметь страницу, работающую без javascript, а затем добавить javascript, чтобы сделать ее более удобной для использования.

0 голосов
/ 16 июля 2009

Что произойдет, если вы замените $('div.showhide,#answer').hide() на $('div.showhide,#answer').toggle();

Или даже лучше, если вы можете, не скрывайте div в document.ready, вместо этого используйте css display:none

...