2012-04-11 2 views
1

Я экспериментирую с использованием jQuery для переключения между двумя функциями. Результаты до сих пор были неоднородными. Ниже приведен весь код пробного сценария.jQuery переключение между функциями - выполняется ноль, один, два, три ... раза

<html> 
<head> 
    <script type="text/javascript" src="../js/jquery.js"></script> 
    <script> 
    $(document).ready(function(){ 
    $('#id').on('click',function(event){ 
     $(this).toggle(
      function(){console.log('Hide');}, 
      function(){console.log('Show');} 
     ); 
    }); 
    }); 
    </script> 
</head> 

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

Итак, когда я впервые нажимаю «Привет», в журнале ничего не отображается.

[Nothing] 

На второй щелчок, я получаю:

Hide 

На третий, он добавляет:

Show 
Hide 

На четвертый, он добавляет:

Hide 
Show 
Hide 

На пятой добавляется:

Show 
Hide 
Show 
Hide 

Надеюсь, вы можете увидеть шаблон :) Почему это делается? Я экспериментировал с .stop(true), но безрезультатно.

Спасибо.

ответ

4

toggle() выполнен по щелчку, поэтому вам не нужна обертка событий click.

$('#id').toggle(
     function(){console.log('Hide');}, 
     function(){console.log('Show');} 
    ); 

Ваш текущий код присоединяет toggle(), чтобы вызвать на click событие в первый раз, когда он щелкнул, поэтому вы ничего не получите первый раз, когда вы щелкните элемент.

+0

Красивая! Щелчок был наследием попытки чего-то другого, прежде чем я начал использовать toggle. Удаление обложек кликов решает проблему, при условии, что все, что я хочу, при щелчке происходит в двух переключающих функциях (что может привести к небольшому дублированию). Или я предполагаю, что могу использовать .toggle (...). On ('click', ...), не так ли? – Nick

+0

@Nick Рад, что это сработало, парень из Сиднея! – alex

+0

@Nick Вы можете связать 'toggle()' и 'on()' как это, где 'on()' будет запускаться при каждом нажатии. – alex

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