2

わかりました StackOverflow - これは奇妙なものです。

問題

したがって、ページの読み込み時にjsonを介してデータベースからテキストを取得する「ボタン」(実際にはjavascriptのonclickリスナーを持つdiv)があります。(アプリケーションを考えると理にかなっています)。IE < 9 はサポートしていません。

問題は、div 内のテキストが IE9 の新しいインスタンスに表示されないことです。ただし、開発者コンソールを開いて (何が問題なのかを把握しようとして) ページを更新すると、IE は何も問題がなかったかのように動作し、ボタンのテキストを正しく入力します。他のすべてのブラウザで動作します。

何。

コード

だからここに私がPHPで持っているものがあります:

<div class="dark-button notification-button" data-notification="NOTIF_A">
    <span class="float-right">&#9654;</span>
</div>

Javascript (Jquery 1.8.0 を使用):

$('document').ready(refreshNotificationButtons('.notification-button'));
function refreshNotificationButtons(buttons){
    var buttons = typeof buttons != 'object' ? $('.notification-button') : buttons;
    var allNotifications = {};
    var buttonsCount = 0;
    buttons.each(function(){
        var button = $(this);
        if(typeof button.attr('id') == 'undefined') button.attr('id', 'notif-button-' + buttonsCount);
        buttonsCount ++;
        if(typeof allNotifications[button.attr('data-notification')] == 'undefined'){
            allNotifications[button.attr('data-notification')] = [button.attr('id')];
        } else {
            allNotifications[button.attr('data-notification')].push(button.attr('id'))
        }
    });
    $.get(
        '/notifications/get_notifications/' + $.map(allNotifications, function(x, abbr){return abbr}).join(','),
        '',
        function(data){
            $(data).each(function(){
                if (typeof allNotifications[this.Notification.NotificationAbbr] != 'undefined'){
                    console.log(this); //debug
                    buttonEl = $('#' + allNotifications[this.Notification.NotificationAbbr]);
                    if(this.Notifications_User.UserID != null) buttonEl.addClass('notification-button-remove');
                    buttonEl.attr('data-notification-id', this.Notification.Notifications_TableID);
                    buttonEl.append($('<span class="notification-button-signup-span">' + this.Notification.EnableText + '</span><span class="notification-button-remove-span">' + this.Notification.DisableText + '</span>'));
                }
            });
        },
        'json'
    );

}

画像

開発コンソールを開く前のボタン:

開発コンソールを開く前のボタン

開発コンソールを開いて更新した後のボタン:

開発コンソールを開いた後のボタン

結論

何か案は?ご覧になりたい場合は、さらにコードを投稿していただければ幸いです。前もって感謝します。

4

2 に答える 2

5

上でコメントしたように、console.log()書き込み用に開いているコンソールがない場合、IE ではうまく機能しません。

への呼び出しを削除するかconsole、このプラグイン (Paul Irish が開発) を追加することができます。

http://paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/

于 2012-08-13T21:57:38.197 に答える
2

IEconsoleには、デバッガーがアクティブな場合にのみオブジェクトがあります。

したがって、実行しようとしてオブジェクトconsole.log()がない場合、のプロパティconsoleを参照しようとすると、javascript 例外がスローされ、コードの実行が停止します。.logundefined

を使用する前のどこかに、初期化コードにこれを挿入することで、これを回避できますconsole.log()

var console = console || {};
if (!console.log) {
    console.log = function(data) {
        // do nothing
    }
}

console.log()これにより、デバッガーが実行されていない場合でも、常に を安全に使用できます。完成した製品コードにステートメントを残すことはお勧めconsole.log()しませんが、開発中に役立つ場合があります。

于 2012-08-13T22:09:49.120 に答える