Ho una struttura ad albero sul lato sinistro della pagina da cui l'utente può eseguire il drill-down e selezionare gli elementi. Ogni ramo ha oggetti simili. Quando si fa clic su un nodo foglia, faccio una chiamata JQuery .load (...) che carica i dati della foglia in un div sul lato destro della pagina.
L'utente può visualizzare e / o apportare modifiche ai dati visualizzati. Se l'utente seleziona una foglia di pari livello, utilizzo .empty () per cancellare il div laterale destro, viene effettuata una nuova chiamata .load () e vengono caricati i nuovi dati.
Il mio problema è che il codice .on ('click' .... del codice precedente è ancora attivo.) Il codice fratello di .on ('click' .... codice viene ignorato.Se clicco sulla foglia originale di nuovo (è ricaricato via .load) il .on ('click' .... chiama work.
C'è un modo per cancellare i precedenti ascoltatori di "click" di JQuery o dovrò trovare un modo per impostare un ID univoco per i dati di ciascuna foglia?
Modifica:
Codice di esempio:
<div id=right_side>
<input type="text" id="firstname">Susan</input>
<label for="nickname">Nickname? <input type="checkbox" id="nickname"></label>
</div>
<script>window.jQuery('#nickname').on('change',function(x){console.log("changed");})</script>
Il codice precedente viene caricato nel div laterale destro ogni volta che si fa clic su un nodo foglia nell'albero. La casella di controllo "nickname" smette di funzionare sui carichi successivi per gli altri nodi foglia. C'è una casella di controllo con un id di "nickname" in tutte le foglie. Ho pensato che se avessi svuotato il div del lato destro, gli ascoltatori associati sarebbero stati resi muti (per così dire) ma gli ascoltatori iniziali rimangono attivi anche dopo la chiamata .empty ().