it-swarm.com.de

erst klick aufheben und dann binden (jquery)

1.Ich habe ein onclick Event am,

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

2.Einmal wird auf die Schaltfläche Schließen geklickt

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

3.Wenn ich auf #train klicke, erneut

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

Das Problem ist nun, dass #train nicht ausgelöst wird. Soll das Ereignis erneut an die Funktion .close gebunden werden?

Bitte vorschlagen. Danke im Voraus.

24

Wenn Sie Ihre Frage betrachten, scheinen Sie das click nicht zurückzubinden, nachdem Sie es unbind haben, sodass es nicht ausgelöst wird. (Vorausgesetzt, Sie haben die Reihenfolge Ihrer Funktionen beibehalten). Du musst es so machen:

//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 die Bindung aufheben, rufen Sie unbind mit dem Funktionsnamen auf:

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

Dann, um den Klick zu binden (wenn #close angeklickt wird), würden Sie verwenden:

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

HINWEIS :

Ein besserer Weg wäre die Verwendung von on und off, wenn Sie eine Version verwenden, die größer als jQuery v1.7 ist, denn dann funktioniert es nicht. Ersetzen Sie im obigen Code einfach bind durch on und unbind durch off.

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

Hoffe das hilft!

39
krishgopinath

VERBINDLICHE UND UNVERBINDLICHE HANDHABER

Der Schlüssel ist Scope.

Sie müssen function (trainClick(){stuff it does}) außerhalb des Event-Handlers deklarieren und definieren, damit die Funktionen der anderen Schaltflächen es 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
5
Sean