2013-06-22 15 views
19

1.Ich auf ein Onclick-Ereignis haben,erste unbind klicken und dann binden (jquery)

$('#locations').click(function(){ 
$('#train').unbind('click'); 
//do some stuff 
} 

2.Once die Schließen-Schaltfläche geklickt wird

$('.close').click(function(){ 
//do some stuff 
} 

3.Then wieder, wenn ich klicken #train

$('#train').bind('click', function() { 
alert('train is clicked'); 
//do some stuff 
} 

Jetzt ist das Problem #train nicht firing.Is es die Veranstaltung wieder auf .close Funktion zu binden?

Bitte schlagen Sie vor. Vielen Dank im Voraus.

+0

Möchten Sie das #train-Element erneut binden, nachdem auf die Schaltfläche zum Schließen geklickt wurde? –

+0

Welche Version von jQuery verwenden Sie? Verwenden Sie '.on' und' .off' anstelle von '.bind'. – Omar

+0

Ankit ja das ist, was ich tun will.So sobald die Schließen-Taste/ID geklickt wird, kann ich wieder #train klicken. –

Antwort

32

Mit Blick auf Ihre Frage, scheinen Sie nicht zurück zu binden click nach Ihnen unbind es, so wird es nicht feuern. (Angenommen, Sie haben die Reihenfolge Ihrer Funktionalität richtig gewählt). Sie müssen es auf diese Weise tun:

//Set a function with the action you need to do after you click the train 
function trainClick() { 
    alert('train is clicked'); 
    //do some stuff 
} 

Wenn Sie unbinding sind, dann rufen Sie unbind mit dem Funktionsnamen:

$('#locations').click(function(){ 
$('#train').unbind('click',trainClick); 
//do some stuff 
} 

Dann den Klick zu binden (wenn geklickt wird), Sie würden verwenden:

$('.close').click(function(){ 
    $('#train').bind('click',trainClick); 
    //do some stuff 
} 

HINWEIS:

Ein besserer Weg, w ould be use on und off, wenn Sie eine Version verwenden, die größer ist als jQuery v1.7, weil ... nun, es wird nicht funktionieren. Im obigen Code ersetzen Sie einfach bind durch on und unbind durch off.

$('#train').on('click',trainClick); 
$('#train').off('click',trainClick); 

Hoffe, das hilft!

+0

Danke PC.Bitte geben Sie mir irgendwann, um damit zu testen ... wird bald auf Sie zurückkommen. –

+0

Brilliant! .. Antwort angenommen ... Vielen Dank für Ihre Hilfe. –

4

VERBINDLICH UND Unbinding HANDLERS

Der Schlüssel ist Scope.

Sie müssen die function (trainClick(){stuff it does}) außerhalb des Event-Handlers deklarieren und definieren, damit die Funktionen der anderen Schaltflächen sie sehen können.

Unten ist ein Beispiel.

function trainClick() 
{ 
    alert("train is clicked"); //Notice this function is declared outside event handlers below 
} 
$('#button1').on("click", trainClick); //this calls the above function 

$("#button2").on("click",function(){ 
    $("#button1").off("click",trainClick); //unbinds button1 from trainClick() function (event handler) 
});//End Button 2 click 

$("#button3").on("click",function(){ 
    $("#button1").on("click",trainClick); //binds button1 to trainClick() function (event handler) 
});//End Button 2 click