Jquery привязать, развязать

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

У меня пока следующее:

 $('#pagination img').each(function(index){
        $( this ).bind ("click",function(){
               pageClick = true;
               pagendex = index*9;
           clearInterval(progresstracker);

             $("#progressbar").progressbar( "option", "value", 0);
             numSecondsPassed=0;
             $('#pagination img').each(function(index){
                $(this).unbind('click');

             });

            // alert("Page Index" + pageIndex);
              rotateImage();

             }).mouseover(function(){
                  $(this).css("cursor","pointer");
            });
        });

Я отвязываю их, и это работает. Но мне нужно через две секунды привязать их обратно к событию щелчка с теми же переменными и снова отвязать. В основном, когда они нажимают «Отвязать» в течение 2 секунд, затем привязывают обратно, повторяют полоскание.


person james    schedule 14.07.2011    source источник


Ответы (2)


Вы можете использовать setTimeout(), чтобы перепланировать привязку через 2 секунды после отмены привязки. Это, вероятно, означало бы извлечение функции, которая связывает/развязывает.


Просто из макушки моей головы я подумал о чем-то вроде:

var bindAll = function () {
  $("...").each(function (index, item) {
     item.bind("click", function (event) {
          // ... do your work 
          unbindAll();
     });
};

var undbindAll = function () {
     $("...").unbind('click');
     setTimeout(bindAll, 2000);
} 

Теперь это предполагает, что вы хотите отменить привязку события для всех изображений, я правильно понял? Извините, если я что-то пропустил или это не работает в вашем случае...

person phtrivier    schedule 14.07.2011
comment
Я попытался использовать тайм-аут, и внутри функции setTimeout() я поместил тот же самый код, что и выше, это не сработало, поскольку мне показалось, что это спагетти-код. У вас есть пример? - person james; 14.07.2011
comment
Я думал о создании var для функции, которая связывает событие, и в подфункции, которая отвязывает, вызовите setTimeout с той же функцией (что теперь возможно, поскольку у функции есть имя). Теперь, поскольку вы используете его в итераторе, это может быть не тот код, который вы написали, это верно. - person phtrivier; 14.07.2011

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

<html>
<head>
<script type="text/javascript" src="jquery-1.6.2.min.js"></script>
<script type="text/javascript">
    var buttonClickable = true;
$(document).ready(function() {
    $(".button").click(function() {
        if (buttonClickable)
        {
            $("body").append($(this).text());
            buttonClickable = false;
            setTimeout("buttonClickable = true; alert('passed');",2000);
        }
        else
        {

        }
    });
});
</script>
</head>
<body>
<div class="button">Button1</div>
<div class="button">Button2</div>
</body>
</html>
person Igoris Azanovas    schedule 14.07.2011
comment
Отличное решение и намного чище, чем весь этот беспорядок. - person james; 14.07.2011
comment
и намного быстрее, чем итерация, хотя список ДВАЖДЫ каждый раз, когда вы нажимаете - person Igoris Azanovas; 14.07.2011