-6

Firefox と Google Chrome では問題なく動作しますが、IE では動作しません。どこが間違っているのか指摘できますか?

Scripts.js

$(document).ready(function () {
    $('.delete').click(function () {
        var contentId = $(this).attr('contentid');
        $.confirm({
            'title': 'Delete Confirmation',
            'message': 'Are you sure you want to delete this record?',
            'buttons': {
                'Yes': {
                    'class': 'blue',
                    'action': function () {
                        DoDelete(contentId);
                    }
                },
                'No': {
                    'class': 'orange',
                    'action': function () {}
                    // Nothing to do in this case. You can as well omit the action property.
                },
                'close': {
                    'action': function () {}
                    // Nothing to do in this case. You can as well omit the action property.
                }
            }
        });
    });
});

HTMLマークアップを生成するconfirmscript

(function ($) {
    $.confirm = function (params) {
        if ($('#confirmOverlay').length) {
            return false;
        }
        var buttonHTML = '';
        $.each(params.buttons, function (name, obj) {
            buttonHTML += '<a href="#" class="button ' + obj['class'] + '">' + name + '<span></span></a>';
            if (!obj.action) {
                obj.action = function () {};
            }
        });
        var markup = [
            '<div id="confirmOverlay">',
            '<div id="confirmBox">',
            '<div id="header">',
            '<div id ="title">',
            params.title,
            '</div></div>',
            '<div id ="textbox">',
            '<p>',
            params.message,
            '</p></div>',
            '<div id="confirmButtons">',
            buttonHTML,
            '</div></div></div>'
        ].join('');
        $(markup).hide().appendTo('body').fadeIn();
        var buttons = $('#confirmBox .button'),
            i = 0;
        $.each(params.buttons, function (name, obj) {
            buttons.eq(i++).click(function () {
                obj.action();
                $.confirm.hide();
                return false;
            });
        });
    }
    $.confirm.hide = function () {
        $('#confirmOverlay').fadeOut(function () {
            $(this).remove();
        });
    }
})(jQuery);
4

1 に答える 1

1

まず、$('.delete')ハンドラの最初の行は次のとおりです。

var contentId = $(this).attr('contentid');

しかし、あなたのマークアップ.deleteは次のとおりです。

<div class="delete"></div>

(contentId属性がないことに注意してください)。幸いなことに(?)あなたのコードは実際には使用していないようですcontentId:-)

より適切には、コードのどの部分が壊れているかを判断する必要があります (コードの JS Fiddle がある場合は調べることができますが、そうでない場合は自分で調べる必要があります)。コードがプラグインに到達していることを確認するために、が呼び出されるalert直前にを配置し、さらに 内に配置します (そうでない場合は、それが問題です)。$.confirm$.confirm

もしそうなら、次の質問は「あなたのマークアップは追加されているが明らかにされていないのか、それとも単に追加されていないのか」です。アラートまたは IE 開発者ツールのいずれかを使用して、DOM を検査し、マークアップが追加されているかどうかを確認できます。そうでない場合、それはあなたの問題です。追加されているのに表示されない場合は、 にfadeIn問題があり、それが問題です。

最後に、ボタン イベントを接続する簡単な方法があります。それ以外の:

var buttons = $('#confirmBox .button'),
        i = 0;
$.each(params.buttons, function (name, obj) {
    buttons.eq(i++).click(function () {
        obj.action();
        $.confirm.hide();
        return false;
    });
});

あなたはただすることができます:

$('#confirmBox .button').each(function(button) {
    $(button).click(function () {
        params.buttons[$(this).text()].action();
        $.confirm.hide();
        return false;
    });
});
于 2012-07-03T18:46:59.050 に答える