2015-07-29 1 views
0

Я пытаюсь выполнить данный .click(function() только на первый щелчок, но это всегда Execute когда щелчок.

работы Это когда нажмите .more-post-button будет добавить класс loading к .main ul и show-more-post в .main li после этого удаление класса loading на функции SetTimeout 7 второгоВыполнить .click (функция() только первый нажмите

JS:.

$(".more-post-button").click(function() { 

    $('.main ul').addClass('loading'); 
    $('.main li').addClass('show-more-post'); 
    setTimeout(function(){ 
    $('.main ul').removeClass('loading'); 
    },7000); 

}); 

Мой вопрос заключается в том, как это сделать только при первом щелчке, а не при каждом нажатии.
Спасибо заранее.

+0

после 7 второго класса, когда 'loading' будут удалены если он снова будет работать? –

+0

Не хотите '.click (function()' каждый раз, хотите только в первый раз. – Aariba

+2

http://api.jquery.com/one/ –

ответ

7

Try :

$(".more-post-button").one("click", function() { 

    $('.main ul').addClass('loading'); 
    $('.main li').addClass('show-more-post'); 
    setTimeout(function(){ 
    $('.main ul').removeClass('loading'); 
    },7000); 
}); 

http://api.jquery.com/one/

Он будет обрабатывать его только один раз.

1

сохранить его в переменной:

var clicked = false; 

    $(".more-post-button").click(function() { 
    if(!clicked) { 
    clicked = true; 
    $('.main ul').addClass('loading'); 
    $('.main li').addClass('show-more-post'); 
    setTimeout(function(){ 
    $('.main ul').removeClass('loading'); 
    },7000); 
} 
}); 
+0

это не сработает.« .click »- это привязка, так что это будет каждый раз вам нужно поставить флажок в функцию щелчка –

+0

да, извините, что вы правы - отредактировано – messerbill

1

Использование развязать в функции, чтобы удалить все события

$(this).unbind(); 

От JQuery 1.7 .off рекомендуемый способ

$(this).off(); 
2

Я использовал бы функцию jQuery's .one(). Это придает обработчик, который будет срабатывать только один раз.

Модифицированный JS

$(".more-post-button").one("click", function() { 

    $('.main ul').addClass('loading'); 
    $('.main li').addClass('show-more-post'); 
    setTimeout(function(){ 
    $('.main ul').removeClass('loading'); 
    },1000); 

}); 

Fiddle

3

Почему усложнять, попробуйте простое замыкание на что. Вы также не будете загрязнять пространство имен в глобале! Demo идет here

(function(){ 
'use-strict'; 

var button = document.getElementsByTagName('button')[0]; 
var myHandler = function() { 
    var click = 0; 
    return function() { 
     if(click === 0) { 
      alert('single click'); 
     } 
     click++; 
    } 
}(); 


button.addEventListener('click', myHandler, false); 
})(); 
+0

Чтобы а) по-прежнему оставлял неиспользуемый обработчик подключенным и b) намного длиннее кода и в) на самом деле сложнее, а не меньше:) Просто используйте 'one', так как этот * есть вопрос jQuery. –

+1

Javascript - это все о закрытии. Что заставляет вас думать, что это сложно? Вопрос также отмечен javascript, jQuery - это всего лишь фреймворк для него. – fubbe

0

На самом деле вы можете отправить в addEventListener вариант { once: true } сказать ему, чтобы стрелять только один раз. Поэтому добавление до @fubbe, а также с использованием только JavaScript, было бы:

var button = document.getElementsByTagName('button')[0]; 
var handler = function() { alert('once click'); }; 

button.addEventListener("click", handler, {once: true}); 

Источник: