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の出力は次のとおりです。

ARGH!!1ARGH!!2ARGH!!3ARGH!!4ARGH!!5ARGH!!6ARGH!!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 +")"));
    }
}

ボタンを 2 回以上クリックすると、関数は 1 ずつ増加します。つまり、2 回押すと 2 行目に移動し、3 回目で 3 行目に移動します。

テーブル行の 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 のような DOM インスペクター (F12) を使用して調査することをお勧めします。

IE のバグについて説明している記事はたくさんありますが、こちらの記事を参照してください。

于 2012-06-12T19:06:57.657 に答える
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とChromeの作業コードをそのまま維持することができました。

私の最終的な解決策は、ブラウザのifステートメントを実際に使用して、IE用とFFおよびChrome用に別の関数を実行することでした。

あなたの助けを提供してくれた人々に感謝します。これが他の誰かに役立つことを願っています。

于 2012-06-15T17:59:06.163 に答える