2011-07-27 2 views
6

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

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

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

ответ

9

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

$("#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/

1

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

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

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

1
var stationLink_clicked = false; 

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

    stationLink_clicked = true; 
}); 
4

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

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

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

4

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

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

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

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

Для сброса использовать счетчики нажмите

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

есть ли способ узнать, сколько раз элемент нажимали? –

+0

Да. Я обновлю ответ, чтобы включить подсчет в одно мгновение. –

3

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

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

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

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

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

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

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