2011-07-27 30 views
6

Tengo un escenario en el que hago clic en un elemento, por ejemplo #stationLink. Cuando vuelva a hacer clic, quiero saber si ya se hizo clic en el elemento. Había intentadocómo saber si un elemento ya está presionado jquery

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

estoy recibiendo false dos veces y luego solamente true .. Creo que me estoy perdiendo algo. ¿O hay alguna otra forma de hacerlo?

Respuesta

9

Esto debería hacer lo que quiera (incluyendo el mantenimiento de un contador ya que he visto que desea en algún comentario)

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

}); 

Utilizando el método .data() almacenar el contador con el elemento DOM, y de esta manera puede aplicar el mismo controlador a múltiples elementos, ya que cada uno tendrá su propio contador.

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

1

Yo suelo añadir una clase llamada .chosen o .x_visited a ella

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

A continuación, se puede comprobar que en contra de $("#stationLink").hasClass('x_visited'); por ejemplo

1
var stationLink_clicked = false; 

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

    stationLink_clicked = true; 
}); 
4

Se podría añadir un atributo se puede comprobar:

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

No me gusta usar una var global para mantener si este elemento ha sido cliqueado por la simple razón de que si tiene que hacer un seguimiento de más de un elemento, puede ser un poco desordenado. Yo prefiero la clase culo o atributo como se puede ver en el elemento si se ha hecho clic

4

Esta versión registra el número de clics:

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

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

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

Para restablecer el uso clic recuento

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

¿hay alguna manera de saber cuántas veces ha hecho click en el elemento? –

+0

Sí. Actualizaré la respuesta para incluir el recuento en un momento. –

3

Esto se debe a que en realidad está vinculando otro manejador de clics al elemento la primera vez que hace clic en él. Solo elimina ese controlador.

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

Otra opción es:

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

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

Creo que este es el método más utilizado por la interfaz de usuario jQuery.

Cuestiones relacionadas