我有以下功能在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>
答案 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;铬。
感谢那些提供帮助的人。希望这有助于其他人。