как узнать, нажат ли элемент jquery

у меня есть сценарий, в котором я выберите элемент, скажем #stationLink. Когда я нажимаю его снова, я хочу знать, был ли элемент уже нажат. Я пытался! .. --5-->

var a=false;
$("#stationLink").click(function(){
   $(this).click(function(){
     a = true
   });
   console.log(a);
});

Я false два раза тогда только true.. Мне кажется, я что-то упускаю. Или есть другой способ сделать это?

7 ответов


Это должно делать то, что вы хотите (включая ведение счетчика, как я видел, вы хотите в каком-то комментарии)

$("#stationLink").click(function(e){
   var $this = $(this);
   var clickCounter = $this.data('clickCounter') || 0;
   // here you know how many clicks have happened before the current one

   clickCounter += 1;
   $this.data('clickCounter', clickCounter);
   // here you know how many clicks have happened including the current one

});

С помощью .data() метод вы храните счетчик с элементом DOM, и таким образом вы можете применить один и тот же обработчик к нескольким элементам, так как каждый из них будет иметь свой собственный счетчик.

демо на http://jsfiddle.net/gaby/gfJj6/1/


вы можете добавить атрибут, который вы можете проверить:

$("#stationLink").click(function(){
   $(this).attr("hasBeenClicked", "true");
});

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


эта версия записывает количество кликов:

$("#stationLink").click(function() {
    var clickCount = $(this).data('clickCount') || 0;

    if (clickCount > 0) {
        // clicked `clickCount` times
    }

    $(this).data('clickCount', clickCount + 1);
});

чтобы сбросить счетчик щелчков, используйте

$("#stationLink").data('clickCount', 0);

это потому, что вы фактически привязываете другой обработчик щелчка к элементу при первом щелчке. Просто удалите этот обработчик.

var clicked = false;
$("#stationLink").click(function(){
    clicked = true
    //Code to toggle if required. 
});

другой вариант:

$('#stationLink').click(function(){
   $(this).data('clicked', true);
});

console.log($(this).data('clicked'));

Я думаю, что это метод, наиболее используемый jQuery ui.


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

$("#stationLink").click(function(){
$(this).addClass("x_visited")
}

тогда вы можете проверить это с помощью


var stationLink_clicked = false;

$("#stationLink").click(function(){
   console.log('Already clicked? ' + stationLink_clicked);
   /* do stuff */

   stationLink_clicked = true;
});