2010-02-23 12 views
29

Sto tentando di selezionare una casella radio quando faccio clic su una LI. Ma ottengo l'errore "a molta ricorsione".jQuery troppa ricorsione

Codice è:

$('li').click(function(){ 
    $('li.selected').removeClass('selected'); 
    $(this).addClass('selected'); 
    $(this).children("input[type=radio]").click(); 
}); 

Questo sta usando jQuery 1.4.2 e 1.7.2 UI.

risposta

29

quando si fa clic su() il bambino input, l'evento scoppia e reimposta il clic() di li. È necessario aggiungere un .Click() per la input e fare event.preventBubble=true; in essa, oppure semplicemente impostare la proprietà controllata invece di click() ing esso.

+0

Molto uso completo ..... –

+0

è [Interrompi su questo errore] ...; d && m.filter (b, a,! 0)}}, "": funzione (a, b, c) {var d, f = e ++, g = x; typeof b == "stringa" &&! l ... causato dallo stesso evento descritto qui? –

11

Sì, è un evento che bolle. Evento bolle fino a li

Non vi resta che fare questo:

$('li').click(function(e){ 
    if($(e.target).is('li')){ 
    $('li.selected').removeClass('selected'); 
    $(this).addClass('selected'); 
    $(this).children("input[type=radio]").click(); 
    } 
}); 

Non aggiungere altri eventi al di sotto, è disordinato

0

come una risposta generica - il problema sembra essere che jQuery ha troppo lavoro da fare - cioè scorrere gli elementi ecc. Ho avuto questo problema e quando ho ispezionato la pagina in firebug c'erano troppi elementi che mi aspettavo che jquery affrontasse.

Nel debugger Javascript di Firefox è possibile fare clic su> accanto all'errore e vi fornirà maggiori dettagli su cosa lo sta attivando.

0

Nel caso in cui questo aiuti qualcuno, questo messaggio può apparire per vari motivi, come descritto da altri contributori, potrebbe essere un caso di bolla pari. Ma per me è stato un bug nel mio codice che ha provocato una chiamata di funzione senza fine. Una funzione si chiamava da sé, che si chiamava di nuovo, in altre parole - ricorrenza infinita.

Quindi, ispeziona il tuo codice e verifica se c'è una situazione in cui jQuery cade in un ciclo infinito di richiamo di un blocco.