Jquery, если первый элемент щелкается - PullRequest
7 голосов
/ 14 января 2011

Мне нужно, чтобы мой скрипт что-то делал при первом нажатии на элемент и продолжал делать что-то другое при клике 2,3,4 и т. Д.

$('selector').click(function() {  
//I would realy like this variable to be updated  
var click = 0;  
    if (click === 0) {  
        do this  
        var click = 1;  
    } else {  
        do this  
    }
});//end click

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

Ответы [ 6 ]

11 голосов
/ 14 января 2011

Взгляните на метод jQuery .data(). Рассмотрим ваш пример:

$('selector').click(function() {
    var $this = $(this),
        clickNum = $this.data('clickNum');

    if (!clickNum) clickNum = 1;

    alert(clickNum);

    $this.data('clickNum', ++clickNum);
});

См. Рабочий пример здесь: http://jsfiddle.net/uaaft/

9 голосов
/ 14 января 2011

Используйте data для сохранения вашего состояния с элементом.

В вашем обработчике кликов

используйте

$ (this).data ('number_of_clicks')

для получения значения и

$ (this) .data ('number_of_clicks', some_value)

, чтобы установить его.

Примечание: $ (this) .data ('number_of_clicks') вернет false, если он еще не был установлен

Редактировать: фиксированная ссылка

1 голос
/ 19 сентября 2017

Это очень легко в ванильных Js.При этом используются правильные различные обработчики кликов

const onNextTimes = function(e) {
    // Do this after all but first click
};

node.addEventListener("click", function onFirstTime(e) {
    node.addEventListener("click", onNextTimes);
}, {once : true});

Документация , CanIUse

1 голос
/ 14 января 2011

Другая альтернатива может состоять в том, чтобы иметь две функции и связать одну с помощью функции one в $(document).ready() (или везде, где вы привязываете свои обработчики), и в этой функции связать вторую функцию запускаться для всех последующих кликов, используя bind или click.

например.

function FirstTime(element) {
   // do stuff the first time round here
   $(element.target).click(AllOtherTimes);
}

function AllOtherTimes(element) {
   // do stuff all subsequent times here
}

$(function() {
    $('selector').one('click', FirstTime);
});
0 голосов
/ 14 января 2011

$ ('# foo'). One ('click', function () { alert («Это будет отображаться только один раз.»); });

это будет привязывать событие click к соответствующему элементу HTML один раз и автоматически отменять привязку после первого отображения события.

Или вы можете сделать следующее:

$ ( "# Foo"). Связать ( 'нажмите', функция () {

// Некоторая активность

$ ( "# Foo") отвязать ( "щелчок"). // привязываем его к какому-либо другому обработчику событий.

});

0 голосов
/ 14 января 2011

Если вам просто нужны последовательности фиксированных поведений, вы можете сделать это:

$ ('селектор'). Toggle (function () {...}, function () {...},function () {...}, ...);

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

...