2012-04-10 3 views
0

Nicht eine Vollzeit-jQuery oder Javascript-Dev so leid, wenn dumm Frage. Ich denke, ich brauche etwas wie die Live-Funktion für einen Austausch von Klassen, die ich zu handhaben habe, welcher Wert an einen Selektor gebunden ist.Aktualisierung der Ereignisbehandlung zu neuen Klasse mit toggleClass

Ich habe im Grunde Markup, das wie folgt aussieht:

für unenabling:

<span id="enable-1695" data-id="1695" class="unenable-item">unenable</span> 

zu ermöglichen:

<span id="enable-1695" data-id="1695" class="enable-item">enable</span> 

ich toggleClass verwenden möchte zu aktualisieren, damit Punkt nachdem auf "nicht erreichbar" geklickt wurde. Außerdem benötige ich den Selektor, um die Laufzeit auf diese neuen Werte zu aktualisieren. Ich glaube, das passierte früher über die Live-Methode. Wie würde ich das erreichen? Ich mache es derzeit manuell, aber die Javascript-Laufzeit aktualisiert die Ereignisbehandlung nicht korrekt.

Welches Javascript würde ich verwenden, um sicherzustellen, dass dies korrekt funktioniert?

Jede Hilfe wird geschätzt.

thx

+0

Was meinen Sie mit "die Laufzeit auf diese neuen Werte aktualisieren"? – shashi

+0

Im Grunde, nach dem Aktualisieren der Klassen über addClass/removeClass für enable-item/unenable-item, zeigen sie auf die alten Event-Handler und müssen auf neue Event-Handler aktualisieren. Ich denke, das wurde von Live gehandhabt, aber nicht sicher, wie jetzt. – timpone

+0

Nicht ganz sicher, was Sie suchen, aber es klingt, als ob Sie auf() sehen sollten. Das sollte dein Problem lösen http://api.jquery.com/on/ – AJak

Antwort

0

Erstens vielleicht „disable“ könnte eine bessere Wortwahl hier sein, aber wir sind nicht hier, Grammatik nitpick ...

Ich gehe davon aus, dass, wenn Sie auf die Schaltfläche ' unenable‘Link, sollte es ändern ein sein‚enable‘Link:

$('.unenable-item').live('click', function() { 
    $(this) 
     .removeClass('unenable-item') 
     .addClass('enable-item') 
     .text('enable'); 
    doSomethingWith($(this).data('id')); 
}); 
$('.enable-item').live('click', function() { 
    // the inverse of the above 
}); 

Hier habe ich die live Funktion, die irgendwie-sorta wie .on oder seine veralteten alias ist .bind, mit der Ausnahme, dass es nicht wirklich anhängen die Ereignishand auf die vom Selektor ausgewählten Objekte. Stattdessen fügt er dem Dokument einen Handler hinzu und wenn ein Klick auf irgendwas erfolgt, prüft es den Selektor und prüft dann, ob es übereinstimmt. Sie können auch .delegate für mehr zielgerichtetes Matching verwenden. Eine bessere Erklärung dieser Dinge gibt es in der Dokumentation (verlinkt).