2010-02-23 7 views
29

Im tratando de seleccionar un cuadro de radio cuando hago clic en un LI. Pero me sale el error "a mucha recursión".jQuery recursión demasiado

Código es:

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

Esto es usando jQuery 1.4.2 y 1.7.2 interfaz de usuario.

Respuesta

29

cuando .click() el hijo input, el evento se activa y vuelve a activar el li(). Debe agregar un .click() al input y hacer event.preventBubble=true; en él, o simplemente establecer la propiedad marcada en lugar de click() ing it.

+0

muy pleno uso ..... –

+0

es [pausa de esta Error] ...; d && m.filter (b, a, 0)}}, "": función (a, b, c) {var d, f = e ++, g = x; typeof b == "cadena" &&! l ... causado por el mismo evento descrito aquí? –

11

Sí, es un evento burbujeante. burbujas evento hasta li

Sólo tienes que hacer esto:

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

No añadir más eventos abajo, que es desordenado

0

Como respuesta genérica - el problema parece ser que jQuery tiene demasiado trabajo por hacer, es decir, pasar por los elementos, etc. Tuve este problema y cuando inspeccioné la página en Firebug había demasiados elementos que esperaba que jquery abordara.

En Firefox Javascript depurador puede hacer clic en> junto al error y le dará más detalles sobre lo que lo está desencadenando.

0

Por si esto ayuda a alguien, este mensaje puede aparecer por varias razones, según lo descrito por otros colaboradores, podría ser un caso de burbuja Even. Pero para mí fue un error en mi código que resultó en una llamada a función sin fin. Una función se llamaba a sí misma, que se llamaba de nuevo, en otras palabras, recursión sin fin.

Por lo tanto, simplemente inspeccione su código y vea si hay una situación en la que jQuery cae en un ciclo interminable de llamadas a algún bloque.

Cuestiones relacionadas