как узнать, если элемент уже нажал jquery - PullRequest
6 голосов
/ 27 июля 2011

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

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

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

Ответы [ 7 ]

9 голосов
/ 27 июля 2011

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

$("#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, и таким образом вы можете применять один и тот же обработчик к нескольким элементам, поскольку каждый из них будет иметь свой собственный счетчик.

demo at http://jsfiddle.net/gaby/gfJj6/1/

4 голосов
/ 27 июля 2011

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

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

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

3 голосов
/ 27 июля 2011

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

var clicked = false;
$("#stationLink").click(function(){
    clicked = true
    //Code to toggle if required. 
});
3 голосов
/ 27 июля 2011

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

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

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

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

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

$("#stationLink").data('clickCount', 0);
2 голосов
/ 27 июля 2011

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

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

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

Я думаю, что этот метод наиболее часто используется в jquery ui.

1 голос
/ 27 июля 2011
var stationLink_clicked = false;

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

   stationLink_clicked = true;
});
1 голос
/ 27 июля 2011

Я обычно добавляю класс с именем .chosen или .x_visited к нему

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

Затем вы можете проверить это с помощью $("#stationLink").hasClass('x_visited');, например

...