2011-01-14 14 views
5

Ho bisogno del mio script per fare qualcosa per la prima volta un elemento viene cliccato e continuare a fare qualcosa di diverso al clic 2,3,4 e così viaJquery se l'elemento prima volta viene cliccato

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

penso davvero che dovrebbe fare affidamento sulle variabili ma non riesco a pensare a come aggiornare la variabile da qui in avanti ogni aiuto sarebbe fantastico.

+0

Qualcuno dovrebbe modificare il tuo post in modo che il codice sia rientrato correttamente e non tutto su una riga. – jmort253

+0

Giuro che è ma im prob facendo qualcosa di sbagliato dice il rientro di 4 spazi ???? – Luis

risposta

10

Date un'occhiata al metodo di jQuery .data(). Si consideri il tuo esempio:

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

    if (!clickNum) clickNum = 1; 

    alert(clickNum); 

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

Vedi un esempio di lavoro qui: http://jsfiddle.net/uaaft/

+0

link errato .. http://api.jquery.com/data/ è più appropriato – Ben

+0

Non proprio "sbagliato" è ... ma grazie per la testa al collegamento migliore. – treeface

+0

Ho fatto esattamente lo stesso errore nel mio post – Ben

9

Utilizzare data per mantenere il proprio stato con l'elemento.

nel vostro gestore di clic,

uso

$ (this) .data ('') NUMBER_OF_CLICKS

per recuperare il valore e

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

per impostarlo.

Nota: $ (this) .data ('NUMBER_OF_CLICKS') restituirà false se non è ancora stata fissata

Edit: collegamento fisso

+0

Questo è sulla strada giusta Mi piace così tanto grazie !!! – Luis

0

Se avete solo bisogno di sequenze di comportamenti fissi, si può fare questo:

$ ('selettori') alternato (funzione.() {...}, function() {...}, function() {...}, ...);

I gestori di eventi nel metodo di commutazione verranno chiamati ordinati.

+0

hai qualche riferimento a quello? .... oh si, è nei documenti ... http://api.jquery.com/toggle-event/ .. non sapevo che potresti avere più di due ... divertente :) – Ben

1

Un'altra alternativa potrebbe essere quella di avere due funzioni, e legare una utilizzando la funzione one in $(document).ready() (o dovunque si sono vincolanti i gestori), in quella funzione, legare la seconda funzione da eseguire per tutti i clic successivi utilizzando bind oppure click.

ad es.

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. ('Click', function() { allarme ('Questo verrà visualizzato solo una volta.'); });

questo legherebbe l'evento click all'elemento Html corrispondente una volta e lo separerà automaticamente dopo il rendering del primo evento.

Oppure, in alternativa u potrebbe il seguente:

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

// Alcune attività

$ ("# foo") slegare ("click");.. // legano a qualche altro gestore di eventi

});

0

Questo è semplicissimo con vanilla Js. Si tratta di utilizzare propri, diversi gestori di click

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

Problemi correlati