IE9中的jQuery.dialog()UI故障

时间:2019-04-12 17:54:11

标签: jquery dialog internet-explorer-8 internet-explorer-9

我实现了一个简单的jQuery UI(1.9.2)对话框模式,当用户单击时将显示一个表单。它可以在所有现代浏览器中正常运行。在IE8中,它失败。在IE9中,它只有在打开开发人员工具1次(即按F12键)后才能工作。具体来说,该对话框将打开,但不会关闭。

可以肯定的是,发生了一个脚本错误,该错误不会冒泡到控制台,因为我对表单提交进行了验证,但也不会触发。请指教。我不能忍受IE8的支持,但事实上只有在打开开发人员工具(甚至在关闭开发人员工具之后),它才能对IE9起作用,这真让我感到困惑。

链接到代码表(第3页): https://www.panelistsurvey.com/se/6321D147384607F3

着陆页-只需按下一步

第1页-选择是

第2页-选择1

第3页-这是当您单击cat复选框时模态应该出现的地方。

function LoadPage() {
    $('html').addClass('hidden');
    var isTestMode = ['%[TestMode]Q11LBL%'].toString().toLowerCase() === 'true';
    var css = $('<link rel="stylesheet" href="https://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">');
    var force_ie9 = $('<meta http-equiv="x-ua-compatible" content="IE=9" />');
    css.appendTo($('head:first'));
    if ($('html').attr('class').match(/ie9/gi)) {
        force_ie9.appendTo($('head:first'));
    }
    $.getScript("https://ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min.js").done(function(script, textStatus) {
        $('.ncp_img').addClass('edit').css('z-index', '50');

        $('.animal_container').each(function(index, element) {
            var dialog_title = "Cat " + (index + 1).toString();
            var handler = $('.question:first input[id]').filter(function(input_index, input_element) {
                return ToInt($(input_element).attr('id').split('_').pop()) === ToInt(index + 1);
            });
            var edit_button = $('<insert class="edit">Please select to enter information.</insert>');
            var status_icon = $('<insert class="alert"></insert>');
            var not_ready_img = $('<img src="https://www.panelistsurvey.com/static/15.1/images/warning.png" />');
            var ready_img = $('<img class="green-check" src="/AppData/1663160647/Group%20Media/green-check.jpg" />');

            $(element).dialog({
                autoOpen: false,
                modal: true,
                title: dialog_title,
                maxWidth: 450,
                minHeight: 600,
                closeOnEscape: false,
                position: {
                    my: "left top",
                    at: "left top",
                    of: $(window)
                },
                resize: function(event, ui) {
                    return false;
                },
                buttons: [{
                        text: "Save",
                        click: function() {
                            $(element).dialog('close');
                        }
                    },
                    {
                        text: "Cancel",
                        click: function() {
                            $(element).dialog('close');
                        }
                    }
                ],
                open: function(event, ui) {
                    setTimeout(function() {
                        if (ToInt($('.ui-dialog:visible').length) > 0) {
                            $(".ui-dialog:visible").position({
                                my: "left top",
                                at: "left top",
                                of: $(window)
                            });
                        }
                    }, 50);
                },
                beforeClose: function(event, ui) {
                    var cat_name = $.trim($(element).find('[type="text"]').val()).length > 0;
                    var cat_info = $(element).find('select').filter(function(select_index, select_element) {
                        return $(select_element).val() > 0;
                    }).length === $(element).find('select').length;
                    console.log('Cat name: ' + cat_name);
                    console.log('Cat info: ' + cat_info);
                    if ((cat_name === true) && (cat_info === true)) {
                        $(status_icon).html(ready_img);
                        //return false; 
                    } else {
                        $(status_icon).html(not_ready_img);
                    }
                }
            }); // close dialog setup 

            $(handler).on('change', function(evt) {
                if ($(evt.target).is(':checked')) {
                    $(element).dialog('open');
                }
            }); //close event handler 

            //Force checkbox 
            $(handler).on('change', function(evt) {
                if ($(evt.target).is(':checked') === false) {
                    $(evt.target).closest('.response').addClass('checked');
                    $(evt.target).attr('aria-checked', true).prop('checked', true).change();
                }
            }); //close event handler 

            $(status_icon).html(not_ready_img);

            $(handler).closest('.response').find('label').append(status_icon);
            $(handler).closest('.response').find('label').append(edit_button);

        }); //close iteration 
        $('html').removeClass('hidden');
    }).fail(function(jqxhr, settings, exception) {
        //$( "div.log" ).text( "Triggered ajaxError handler." ); 
    });

} //close LoadPage() 

function ProcessSubmit() {
    var filled_count = $('.green-check').length;
    var input_count = $('[id]').filter(function(index, element) {
        return $(element).attr('id').toLowerCase().match(/_wrapper/gi);
    }).first().find('input[id]').length;

    var cat_name_proxy = $('.cat_name_proxy').closest('.question').find('textarea');
    var name_array = [];
    var input_fields = $('.brand_name').closest('.question').find('[type="text"]').filter(function(text_input, text_element) {
        return $.trim($(text_element).val()).length > 0;
    });
    input_fields.each(function(index, element) {
        name_array.push($(element).val());
        name_array = RandomizeArray(name_array);
    });

    if (name_array.length) {
        $(cat_name_proxy).val(name_array[0].toString());
    }

    console.log('test');

    if (filled_count !== input_count) {
        alert('Please fill in the details for each cat.');
        return false;
    }

} //close ProcessSubmit() 

1 个答案:

答案 0 :(得分:0)

我在创建一个构建在 Bootstrap 3.4.1 轮播插件之上的工具时再次发现了这个问题。具体发生的事情是我的代码中有一些杂散的 console.log 行。 IE9 需要为控制台添加 polyfill,否则会抛出错误。我在一个环境中工作,同时连续触发多个功能,这样您将无法准确看到错误发生的位置,但它会捕获它并发出警报以指示您的方向。在我在 IE9 中加载控制台(F12 开发人员工具)之前,页面不会静默失败(似乎没有加载 JS)。所以我的特定问题与行为一致,因为 console.log 仅在您在 IE9 中打开开发人员工具时才有效。一旦我删除了 console.log 引用,Bootstrap carousel 就会正确加载(所有 JS 都正确加载)。

未来的解决方案是简单地添加一个 polyfill 来始终定义 console.log 以防止出现此问题。

TLDR:对话框没有关闭的原因是因为我在关闭时调用了 console.log 并且它导致了无提示错误,因为控制台在打开之前不存在。

见:https://stackoverflow.com/a/15771110/5076162