jQuery cada () no funciona en IE 7

Tengo la siguiente función que funciona correctamente en Chrome y Firefox, pero no en IE7. Se supone que la función se ejecuta en cada instancia de una fila en la tabla seleccionada. En IE 7 solo se ejecuta una vez.

function rowTotalit(targee) {
    var sum = 0;
    var thisRow = targee.closest('tr');
    thisRow.find('td.tmipt input').each(function() {
        var numChk = $(this).val();
        sum = sum + Number(numChk);
        thisRow.find('.total').fadeOut(200, function() {
            $(this).html(sum);
            $(this).fadeIn(500);
            $(this).val(sum);
        });
        thisRow.find('.total').next().val(sum);
    });
}​

Aquí está el disparador desde dentro de otra función:

for (trs = 1; trs <= tblerows; trs++) {
    $("#testingmsg").append("ARGH!!" + trs);
    rowTotalit($("#timeChart tr:nth-child(" + trs + ")"));
}​

Salida del probandomsg div en Chrome y Firefox es:

ARGH!!1ARGH!!2ARGH!!3ARGH!!4ARGH!!5ARGH!!6ARGH!!7

En IE7 es:

ARGH!!1ARGH!!2

Entonces, el resultado me dice que la función llega a cada declaración dentro de la función y muere en IE. ¿Alguien tiene alguna idea?

ACTUALIZACIÓN: La función que contiene el bucle for se activa con un evento de clic en un botón:

function addEmAllUp(){
    var tblerows = ($('#timeChart tr').length - 2);
    alert(tblerows);
    for (trs = 1; trs <=tblerows; trs++){
        $("#testingmsg").append("ARGH!!" + trs);
        rowTotalit($("#timeChart tr:nth-child(" + trs +")"));
    }
}

Cuando hago clic en el botón más de una vez, la función aumenta en 1. Así que lo presiono dos veces, va a la segunda fila, la tercera vez me lleva a la tercera fila, etc.

Aquí hay un ejemplo de la fila HTML de la tabla:

 <tr class="timerow">
    <td class='projName' >Holiday<br /><span class='small'>999906</span></td>
<td class="tmipt" align="center"><input type="text" class="numbersOnly  alertME"  name="999906[]" value="0.00" /></td>
    <td class="tmipt" align="center"><input type="text" class="numbersOnly  alertME"  name="999906[]" value="0.00" /></td>
    <td class="tmipt" align="center"><input type="text" class="numbersOnly "  name="999906[]" value="0.00" /></td>
    <td class="tmipt" align="center"><input type="text" class="numbersOnly "  name="999906[]" value="0.00" /></td>
    <td class="tmipt" align="center"><input type="text" class="numbersOnly "  name="999906[]" value="0.00" /></td>
    <td class="tmipt" align="center"><input type="text" class="numbersOnly "  name="999906[]" value="0.00" /></td>
    <td class="tmipt" align="center"><input type="text" class="numbersOnly "  name="999906[]" value="0.00" /></td>
    <td align="center"><div id="total_1" class="total">0.00</div><input type="hidden" name="total_999906" class="total" value="0.00" /></td>
    </tr>

preguntado el 12 de junio de 12 a las 19:06

Si entiendo tu descripción, parece que each() está funcionando bien, pero su for el bucle solo da una vuelta. -

Como consigues eso tblerows? -

@Sparky672 - No exactamente. El bucle for finaliza porque la función "rowTotalit" no se completa. Para averiguarlo, agregué otro append() dentro de la función justo encima de la instrucción each() y se mostró en la salida. -

Creo que agregar el HTML puede ser útil para descubrir qué está fallando. -

@bažmegakapa: tblerows se define arriba del bucle for. No lo incluí en el fragmento. var tblerows = ($('#timeChart tr').length - 2); -

2 Respuestas

son las filas de tu mesa <tr> siendo alternado (mostrado/oculto)?

IE maneja esto de manera diferente a otros navegadores, es posible que desee investigar si ese es su problema utilizando un inspector DOM como el de Chrome (F12).

Aquí hay un artículo que habla de ese error de IE, aunque hay muchos disponibles.

Respondido el 12 de junio de 12 a las 20:06

¡¡Entiendo!!

Hay otra instrucción find() dentro de each() que estaba matando a cada uno prematuramente.

thisRow.find('.total').fadeOut(200, function() {
            $(this).html(sum);
            $(this).fadeIn(500);
            $(this).val(sum);
        });
        thisRow.find('.total').next().val(sum);

Acabo de sacar el código anterior de cada declaración y funciona correctamente.

Para cualquiera que pueda estar sufriendo con el mismo problema de IE que no ejecuta su .each() correctamente, así es como depuré mi problema.

if($.browser.msie){
alert(someTestValue);
}

Utilicé la condición anterior para probar diferentes partes de mi código solo para IE y eso no solo ayudó a reducir lo que estaba mal, sino que pude mantener intacto mi código de trabajo para FF y Chrome.

Mi solución final fue usar la instrucción if del navegador para ejecutar una función diferente para IE y otra para FF y Chrome.

Gracias a los que ofrecieron su ayuda. Espero que esto ayude a alguien más.

Respondido el 16 de junio de 12 a las 03:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.