jQuery each()在IE 7中不起作用

时间:2012-06-12 18:55:58

标签: javascript jquery html internet-explorer-7 each

我有以下功能在Chrome和Firefox中正常运行,但在IE7中没有。 该函数应该在选定表中的每一行实例上运行。在IE 7中,它只运行一次。

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);
    });
}​

以下是另一个函数中的触发器:

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

Chrome和Firefox中 testingmsg div的输出为:

  

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

在IE7中它是:

  

哎呀!! 1ARGH !! 2

因此输出告诉我函数会进入函数中的每个语句并在IE中死掉。有人有什么想法吗?

更新 保持for循环的函数由按钮上的单击事件触发:

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 +")"));
    }
}

当我多次单击该按钮时,该功能会递增1.所以我按两次,它会转到第二行,第三次转到第三行,等等。

以下是表格行HTML的示例:

 <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>

2 个答案:

答案 0 :(得分:1)

您的表格行<tr>是否被切换(显示/隐藏)?

IE处理方式与其他浏览器的处理方式不同,您可能需要使用Chrome检查程序(如F12)中的DOM检查程序调查这是否是您的问题。

Here's an article谈论IE漏洞,尽管有很多可用的。

答案 1 :(得分:0)

知道了!!

在each()中有另一个find()语句,它过早地杀死了每个语句。

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

我只是将上面的代码移出了每个语句,它运行正常。

对于任何可能遇到同样问题的IE没有正确运行.each()的人来说,这就是我调试问题的方法。

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

我使用上面的条件来测试我的代码的不同部分仅用于IE,这不仅有助于缩小错误的范围,而且还能够保持我的工作代码在FF&amp;铬。

我的最终解决方案是实际使用浏览器if语句为IE运行不同的功能而另一个用于FF&amp;铬。

感谢那些提供帮助的人。希望这有助于其他人。