2013-06-30 2 views
4

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

var threeClick = function() { 
    var n = 0; 
    while(n > 2) { 
     $(document).ready(function() { 
      $('div').click(function(){ 
       n++; 
      }); 
     }); 
     $(document).ready(function(){ 
      $('div').fadeOut('slow'); 
     }); 
    } 
} 
threeClick(); 

ответ

3
var n 
$(document).ready(function() 
{ 
    n=0; 
    $('div').click(function() 
    { 
     n++; 
     if(n==3) 
     { 
      n=0; 
      $('div').fadeOut('slow'); 
     } 
    }); 
} 
+0

Спасибо за реагировании, мне нравится, как ваш простой и чистый. – michaelto20

3

Это должно работать:

$(document).ready(function() { 
    var n = 0; 
    $('div').click(function() { 
     n++; 

     if(n == 3) { 
      $('div').fadeOut('slow'); 
     } 
    }); 
}); 

Я задаюсь вопросом, почему ваш while цикл не блокирует выполнение, пока он сидит и крутится. JavaScript не многопоточен; есть один поток выполнения, и я бы предположил, что while блокирует этот поток. Но в остальном это не будет работать, потому что вы никогда не проверяете значение n, прежде чем вы исчезнете из div. Вот почему исчезновение происходит почти сразу. Также нет необходимости в многочисленных звонках $(document).ready(...); один сделаю.

Я также рекомендовал бы использовать .on:

$(document).ready(function() { 
    var n = 0; 
    $('div').on('click', function() { 
     n++; 

     if(n >= 3) { 
      $('div').fadeOut('slow'); 
     } 
    }); 
}); 

Это работает, потому что n, который был определен в анонимной функции (передается .ready) доступна для обратного вызова (закрытия) передается .on или .click. Закрытия лексически связаны с областью, в которой они определены, а это означает, что для закрытия доступно все, что определено в закрытой области. Таким образом, ваше значение n будет обновлено и доступно для закрытия.

+0

Супер полезно! Спасибо, что заполнили детали, и это помогло мне понять, как все это работает. – michaelto20

+0

@ michaelto20 Добро пожаловать. :) –

0

Вам нужно создать переменную, удерживающую счетчик вне функции, или она будет сбрасываться при каждом вызове функции. Дайте div имя класса - здесь я использовал 'divClassName'.

var numClicks = 0; 

$(function() { 

    $(document).on("click",".divClassName",function() { 

     numClicks+=1; 

     if (numClicks > 2) { 

      $('div').fadeOut('slow'); 

     } 
    } 

}; 
+0

Спасибо за то, что они держат счетчик вне функции. – michaelto20

0

С JQuery вы могли бы сделать что-то подобное

var counter=0; 
$('div').on('click',function(){ 
      counter++; 
      if(counter==3)$('div').fadeOut();} 
     ); 
+0

Спасибо за ответ! – michaelto20

3
$(document).ready(function() { 
    var n = 0; 
    $('div').click(function() { 
     n++; 
     if (n == 3) { 
      $(this).fadeOut('slow'); 
     } 
    }); 
}); 

см this

Вам не придется повторять $(document).ready. Это метод (из jQuery), который вызывается при готовности DOM. Таким образом, ваш код должен войти в эту функцию;

+0

Узнай что-нибудь новое каждый день. Я просто делал простые вещи в кодекадемии и никогда не сталкивался с тем, что говорит об использовании «$ (document.ready)». Спасибо за ввод. – michaelto20

2

Вы можете попробовать это тоже

$(function(){ 
    $('#myDiv').on('click', function(){ 
     var clicks = $(this).data('clicks') || 0; 
     $(this).data('clicks', clicks+1); 
     if($(this).data('clicks') >=3) $(this).fadeOut(); 
    }); 
}); 

DEMO.

+0

Спасибо за показ другого варианта. Ты очень компактный, но я думаю, что понимаю. – michaelto20

+0

Добро пожаловать и да, так как мы можем использовать 'jQuery', то почему бы не использовать его! :-) –

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