2011-01-14 9 views
5

necesito mi script para hacer algo por primera vez se hace clic en un elemento y continuar a hacer algo diferente en tecleo 2,3,4 y así sucesivamenteJquery si su elemento primera vez que se hace clic en

$('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 

realmente creo que debería depender de las variables, pero no puedo pensar en cómo actualizar la variable de aquí en adelante; cualquier ayuda sería increíble.

+0

Alguien debería editar el post para que el código tiene sangría correctamente y no en una sola línea. – jmort253

+0

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡4 espacios ?? – Luis

Respuesta

10

Para consultar el método de jQuery .data(). Tenga en cuenta su ejemplo:

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

    if (!clickNum) clickNum = 1; 

    alert(clickNum); 

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

Ver un ejemplo de trabajo aquí: http://jsfiddle.net/uaaft/

+0

enlace incorrecto .. http://api.jquery.com/data/ es más apropiado – Ben

+0

No del todo "equivocado" es ... pero gracias por la mano al mejor enlace. – treeface

+0

Hice exactamente el mismo error en mi publicación – Ben

9

Utilice data para conservar su estado con el elemento.

En el controlador de clic,

uso

$ (this) .data ('') NUMBER_OF_CLICKS

para recuperar el valor y

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

para configurarlo.

Nota: $ (this) .data ('NUMBER_OF_CLICKS') devolverá false si no se ha fijado todavía

Editar: enlace fijo

+0

Esto está en el camino correcto Me gusta esto muchas gracias !!! – Luis

0

Si sólo necesita secuencias de comportamientos fijos, usted puede hacer esto:

$ ('selector') alterno (Función.() {...}, función() {...}, función() {...}, ...);

Los controladores de eventos en el método de alternar se llamarán ordenados.

+0

¿Tiene referencia para eso? .... oh sí, está en los documentos ... http://api.jquery.com/toggle-event/ ... no sabía que podrías tener más de dos ... qué gracioso :) – Ben

1

Otra alternativa podría ser tener dos funciones, y se unen uno usando la función one en $(document).ready() (o donde va a enlazar sus manipuladores), y en esa función, obligar a la segunda función que se ejecute todos los clics posteriores utilizando bind o click.

p. Ej.

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

$ ('# foo') uno. ('Clic', function() { alert ('Esto se mostrará sólo una vez.'); });

esto vincularía el evento de clic al elemento Html correspondiente una vez y lo desvincularía automáticamente después de la representación del primer evento.

O, alternativamente, podría u lo siguiente:

$ ("# foo").bind ('click', function() {

// Algo de actividad

$ ("# foo") desenlazar ("clic");.. // unen a algún otro controlador de eventos

});

0

Esto es superfácil en vainilla Js. Este es el uso adecuadas, diferentes manipuladores clic

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

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

Documentation, CanIUse

Cuestiones relacionadas