2011-01-14 13 views
5

geklickt wird, muß ich mein Skript etwas auf das erste Mal tun, ein Element geklickt wird und weiterhin etwas anderes auf Klick 2,3,4 und so weiterJQuery, wenn es das erste Mal, Element

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

wirklich ich denke, es sollte sich auf die Variablen verlassen, aber ich kann nicht daran denken, wie die Variable von hier aus aktualisiert werden, wäre jede Hilfe toll.

+0

Jemand sollte Ihren Beitrag bearbeiten, so dass der Code richtig eingerückt ist und nicht alle auf einer Linie. – jmort253

+0

Ich schwöre es ist, aber ich prob etwas falsch machen, es sagt Einzug um 4 Leerzeichen ???? – Luis

Antwort

10

.data() Methode einen Blick auf jQuery haben. Betrachten Sie Ihr Beispiel:

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

    if (!clickNum) clickNum = 1; 

    alert(clickNum); 

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

Sehen Sie ein funktionierendes Beispiel hier: http://jsfiddle.net/uaaft/

+0

falscher Link .. http://api.jquery.com/data/ ist passender – Ben

+0

Nicht ganz "falsch" ist es ... aber danke für die Köpfe bis zum besseren Link. – treeface

+0

Ich habe genau den gleichen Fehler in meinem Beitrag – Ben

9

Verwenden Sie data, um Ihren Status mit dem Element beizubehalten.

In Ihrem Click-Handler,

Verwendung

$ (this) .data ('NUMBER_OF_CLICKS')

den Wert und die

$ abgerufen werden (dies) .data ('number_of_clicks', some_value)

, um es einzustellen.

Hinweis: $ (this) .data ('NUMBER_OF_CLICKS') wird falsch zurück, wenn es noch

Bearbeiten nicht gesetzt wurde: feste Querung

+0

Das ist auf dem richtigen Weg Ich mag das, vielen Dank !!! – Luis

0

Wenn Sie brauchen nur Sequenzen von festen Verhaltensweisen, können Sie dies tun:

$ ('Wähler') hin- und herzuschalten (Funktion.() {...}, function() {...}, function() {...}, ...);

Event-Handler in der Toggle-Methode werden ordnungsgemäß aufgerufen.

+0

haben Sie Bezug auf das zurück? .... oh ja, es ist in der docs .. http://api.jquery.com/toggle-event/ .. wusste nicht, dass Sie mehr als zwei haben könnte ... lustig, dass :) – Ben

1

könnte weitere Alternative sein, zwei Funktionen zu haben, und bindet man die one Funktion in $(document).ready() (oder wo auch immer Sie Ihre Handler sind verbindlich), und in dieser Funktion bindet die zweite Funktion für alle nachfolgenden Klicks bind mit ausgeführt werden sollte oder click.

z.B.

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') ein. ('Klick', function() { alert ('Dies wird nur einmal angezeigt werden.'); });

würde das click-Ereignis einmal an das korrespondierende Html-Element binden und nach dem ersten Event-Rendering automatisch lösen.

Oder alternativ könnte u folgendes:

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

// Einige Aktivität

$ ("# foo") lösen ("Klick").. // binden sie an einen anderen Ereignishandler

});

0

Das ist super einfach in Vanille Js. Dies ist unter Verwendung geeigneten, verschiedenen Klick-Handler

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