0

我有以下功能在 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 的输出是:

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

在 IE7 中是:

啊!!1啊!!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>
4

2 回答 2

1

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

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

这是一篇讨论该 IE 错误的文章,尽管有很多可用的。

于 2012-06-12T19:06:57.657 回答
0

知道了!!

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

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 和 Chrome 上的完整。

我的最终解决方案是准确地使用浏览器 if 语句为 IE 运行不同的功能,为 FF 和 Chrome 运行另一个功能。

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

于 2012-06-15T17:59:06.163 回答