0

私のコードは実際にはクロムで非常にうまく機能しますが、IE でのテストは失敗します:/ e.element().hide() および e.element().insert() は機能しません。Ajax.Request() は両方のブラウザーで正常に動作しています。修正方法はありますか?

$$('a.deleteButton').invoke('observe', 'click', function(e) {
            var commentID = parseInt(this.readAttribute('data-commentid'));
            e.stop();
            new Ajax.Request('index.php?action=CNewsComment',
                    {
                        method: 'POST',
                        parameters: {entryID: commentID, cNewsAction: 'delete'},
                        onSuccess: function(transport){
                            new Effect.toggle('commentID' + commentID, 'Appear', {duration:0.5});
                            var count = parseInt($('commentsCount').innerHTML.stripTags());
                            $('commentsCount').innerHTML = count-1;
                        },
                        onLoading: function(transport){
                            e.element().hide(); //not working in IE but in Chrome

                            if ($('deleteLoading' + commentID)) {
                                $('deleteLoading' + commentID).show();
                            }
                            else {
                                e.element().up().insert ({ 
                                    'before'  : '<img id="deleteLoading' + commentID + '" src="' + RELATIVE_WCF_DIR + 'images/cNewsSpinnerS.gif" alt="" />'
                                });
                            }
                        },
                        onFailure: function(transport){ 
                            e.element().show();                         
                            $('deleteLoading' + commentID).hide();                          
                            alert("An error occurred: " + transport.status + ' - ' + transport.statusText);
                        }
            });
    });

更新: IE で動作しないコードを AJAx-Request の外に置くと、動作します:

$$('a.deleteButton').invoke('observe', 'click', function(event) {
            event.stop();
            // IE PART START
            event.element().hide();
            if ($('deleteLoading' + commentID)) {
                $('deleteLoading' + commentID).show();
            }
            else {
                event.element().up().insert ({ 
                'before'  : '<img id="deleteLoading' + commentID + '" src="' + RELATIVE_WCF_DIR + 'images/cNewsSpinnerS.gif" alt="" />'
                });
            }
            // IE PART END
            new Ajax.Request('index.php?action=CNewsComment',
                    {
                        method: 'POST',
                        parameters: {entryID: commentID, cNewsAction: 'delete'},
                        onLoading: function(transport){
                        }

しかし、onLoading 関数内ではそうではありません。

4

3 に答える 3

0
$$('a.deleteButton').invoke('observe', 'click', function(e) {
        var commentID = parseInt(this.readAttribute('data-commentid'));
        e.stop();
        new Ajax.Request('index.php?action=CNewsComment',
                {
                    method: 'POST',
                    parameters: {entryID: commentID, cNewsAction: 'delete'},
                    onSuccess: function(transport){
                        new Effect.toggle('commentID' + commentID, 'Appear', {duration:0.5});
                        var count = parseInt($('commentsCount').innerHTML.stripTags());
                        $('commentsCount').innerHTML = count-1;
                    },
                    onLoading: (function(transport, e){
                        e.element().hide(); //not working in IE but in Chrome

                        if ($('deleteLoading' + commentID)) {
                            $('deleteLoading' + commentID).show();
                        }
                        else {
                            e.element().up().insert ({ 
                                'before'  : '<img id="deleteLoading' + commentID + '" src="' + RELATIVE_WCF_DIR + 'images/cNewsSpinnerS.gif" alt="" />'
                            });
                        }
                    }).bindAsEventListener(this),
                    onFailure: function(transport){ 
                        e.element().show();                         
                        $('deleteLoading' + commentID).hide();                          
                        alert("An error occurred: " + transport.status + ' - ' + transport.statusText);
                    }
        });
});
于 2012-10-29T04:24:15.140 に答える
0

これを試して:

    $$('a.deleteButton').invoke('observe', 'click', function(e) {
        var element = e.element();
        var commentID = parseInt(this.readAttribute('data-commentid'));
        e.stop();
        new Ajax.Request('index.php?action=CNewsComment', {
            method: 'POST',
            parameters: {entryID: commentID, cNewsAction: 'delete'},
            onSuccess: function(transport) {
                new Effect.toggle('commentID' + commentID, 'Appear', {duration:0.5});
                var count = parseInt($('commentsCount').innerHTML.stripTags());
                $('commentsCount').innerHTML = count-1;
            },
            onLoading: function(transport) {
                element.hide(); // not working in IE but in Chrome

                var delId = 'deleteLoading' + commentID;
                if ($(delId)) {
                    $(delId).show();
                } else {
                    element.up().insert({ 
                        'before': '<img id="' + delId + '" src="' + RELATIVE_WCF_DIR + 'images/cNewsSpinnerS.gif" alt="" />'
                    });
                }
            },
            onFailure: function(transport) { 
                element.show();                         
                $('deleteLoading' + commentID).hide();                          
                alert("An error occurred: " + transport.status + ' - ' + transport.statusText);
            }
        });
    });

このコードが機能しない場合はonLoading、次のバリアントに置き換えてみてください。

            onLoading: function(element, transport) {
                element.hide(); // not working in IE but in Chrome

                var delId = 'deleteLoading' + commentID;
                if ($(delId)) {
                    $(delId).show();
                } else {
                    element.up().insert({ 
                        'before': '<img id="' + delId + '" src="' + RELATIVE_WCF_DIR + 'images/cNewsSpinnerS.gif" alt="" />'
                    });
                }
            }.curry(element),

PS どの IE のバージョンを使用していますか? 古い IE には 1 つのグローバル イベント オブジェクトwindow.eventがあり、非同期コールバックの時点で、閉じた状態でも元のクリック イベントではなく、呼び出されるe直前に発生した別のイベントを指す場合があります。onLoading

于 2012-11-05T18:05:41.447 に答える
-1

プロトタイプについて少し知っています。しかし、「e」が使用したい要素であるかどうかを確認するためにデバッグするのはどうですか。時々私はこの種の問題を抱えていました。

于 2012-10-28T04:43:36.867 に答える