【问题标题】:IE: jQuery.show() only shows element when using alert() before/after showIE:jQuery.show() 仅在显示之前/之后使用 alert() 时显示元素
【发布时间】:2014-12-24 12:00:55
【问题描述】:

我正在尝试在 javascript 函数上添加一个简单的“等待框”,如下所示:

function caricaElenco(indice) {
    (...)
    $("[id*=Wait1_WaitBox]").show(); // Visualizzo 'rotella' caricamento
    (...)
    $("[id*=Wait1_WaitBox]").hide();
}

它在 Firefox 上运行良好,但在 Internet Explorer 11 上却不行,这并没有显示出来。 HTML 是:

<div id="ctl00_Wait1_WaitBox" class="updateProgress">
    Attendere...<br />
    <img src="../Images/wait.gif" align="middle" />
</div>

最奇怪的是我尝试了这个,为了一个简单的检查:

function caricaElenco(indice) {
    (...)
    alert($("[id*=Wait1_WaitBox]").css('display'))
    $("[id*=Wait1_WaitBox]").show(); // Visualizzo 'rotella' caricamento
    alert($("[id*=Wait1_WaitBox]").css('display'))
    (...)
    $("[id*=Wait1_WaitBox]").hide();
}

而且它正在工作,我的意思是它在“无”和“阻止”之后显示警报......而且它也在显示框!但并非没有警报...为什么?

更新:

尝试使用[id*="Wait1_WaitBox"],但它是一样的。 jQuery 版本是 1.8.2。

它只适用于警报

我的意思是,如果我这样做:

function caricaElenco(indice) {
    (...)
    alert('whatever');
    $("[id*=Wait1_WaitBox]").show(); // Visualizzo 'rotella' caricamento
    alert('whatever');
    (...)
    $("[id*=Wait1_WaitBox]").hide();
}

它正在显示框,但如果我这样做:

function caricaElenco(indice) {
    (...)
    $("[id*=Wait1_WaitBox]").show(); // Visualizzo 'rotella' caricamento
    (...)
    $("[id*=Wait1_WaitBox]").hide();
}

在 Internet Explorer 11 上,它不起作用(我的意思是不显示“等待框”,而是正确执行该函数必须在 (...) 中执行的所有其他操作——加载带有 AJAX 调用的 gridview) Firefox 都在工作。没有 JavaScript 错误。

更新 2: 几乎整个javascript函数:

// Fill part of gridView
function loadList(index) {
    index = parseInt(index);
    buffer = 100; // Number of rows to load
    $("[id*=divGrid]").unbind('scroll');
    $('[id*="Wait1_WaitBox"]').show(); // Show loading 'wheel' 
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "PageName.aspx/webMethodName",
        data: '{id:' + $("[id*=hdnID]").val() + ', index:' + index + '}',
        dataType: "json",
        async: false,
        success: function (response) {
        if (index == 0) {
            (...)
            $("[id*=grid] tr:last-child").remove();
            var row = "<tr class='" + response.d[index].State + "'>";
            row += "<td class="Column1"></td>";
            (...)
            row += "<td class="DateColumn"></td>";
            (...)
            row += "<td class='columnN'></td></tr>";

            $("[id*=grid]").append(row);
        }
        row = $("[id*=grid] tr:last-child").clone(true);
        $("[id*=grid] tr:last-child").remove();
        if (index <= response.d.length) {
            if (index + buffer > response.d.length)
                var stop = response.d.length;
            else
                var stop = index + buffer;
            (...)
            for (var i = index; i < stop; i++) {
                var j = 0;
                (...)  
                $("td", row).eq(j).html("<span id='lblCodeNumber" + i + "' >" + response.d[i].CodeNumber + "</span>"); j++;
                (...)
                var effectDate = new Date(parseInt(response.d[i].effectDate.substr(6)));
                $("td", row).eq(j).html(effectDate.getDate() + '/' + (effectDate.getMonth() + 1) + '/' + effectDate.getFullYear()); j++;
                }
                (...)
                var toBeCounted = "";
                var checked = "";
                if (response.d[i].ToBeCounted != null)
                    toBeCounted = response.d[i].ToBeCounted .toString();
                else
                    toBeCounted = "true"; 
                if (toBeCounted == "true")
                    checked = "checked = 'checked'";
                else
                    checked = ""; 
                var rdToBeCounted = "<span><input type='radio' class='radio' " + checked + " name='ToBeCounted" + i + "' value='s' id='sToBeCounted" + i + "' />";
                rdToBeCounted += "<label for='s" + i + "'>YES</label>";
                if (toBeCounted == "false")
                    checked = "checked = 'checked'";
                else
                    checked = "";
                toBeCounted += "<input type='radio' class='radio' " + checked + " name='ToBeCounted" + i + "' value='n' id='nToBeCounted" + i + "' />";
                rdToBeCounted += "<label for='n" + i + "'>NO</label></span>";
                $("td", row).eq(j).html(rdToBeCounted); 
                $("[id*=grid]").append(riga);
                (...)
                riga = $("[id*=grid] tr:last-child").clone(true);
            }
            if (stop < response.d.length) {
                $("[id*=divGrid]").scroll(function (e) {
                    if (element_in_scroll(".congruenti tbody tr:last")) {
                        loadList($(".congruenti tbody tr:last td:last").html());
                    };
                });
            }
            $('[id*="Wait1_WaitBox"]').hide();
        }
    },
    error: function (result) {
        alert("Error! " + result.status + " - " + result.statusText);
    }
});
}

【问题讨论】:

  • 试试:) $('[id*="Wait1_WaitBox"]')
  • 第一个:请添加您正在使用的 jQuery 版本。第二:“But not without the alert”是什么意思?是否出现 Javascript 错误(检查您的控制台)?
  • 可能是IE的渲染bug,能否请您在开发者工具(F12)中检查Wait1_WaitBox元素的状态/样式?
  • 我可以在星期一回来工作时尝试,但正如问题所示,我已经尝试过 alert($("[id*=Wait1_WaitBox]").css('display' )) 在.show() 之前和之后,我得到正确的“无”和“阻止”。我也认为是 IE 渲染问题..

标签: javascript jquery html internet-explorer cross-browser


【解决方案1】:

最后你似乎又把它隐藏了$("[id*=Wait1_WaitBox]").hide();

您需要显示这两行之间的内容。

它适用于alert,因为脚本的执行被冻结,直到您关闭警报(最后一行还没有执行)。

【讨论】:

  • 好的,我可以在星期一回来工作时详细说明两者之间的情况。但是是对 web 方法的 ajax 调用,该方法加载了具有无限滚动效果的部分 gridview(他们不想要分页)。这需要一段时间,firefox 在加载时显示框(也没有警报),但 IE 在加载 gridview 之前什么都不显示,并且一些用户很快开始点击到处阻塞页面.. 可能将 IE 的错误呈现为 try-catch -最后说,我想知道是否有一些解决方法..
  • 在这里找到同样的问题:stackoverflow.com/questions/10985969/…
猜你喜欢
  • 2014-06-30
  • 1970-01-01
  • 2018-05-17
  • 1970-01-01
  • 2012-10-15
  • 2023-03-12
  • 2013-05-15
  • 1970-01-01
  • 2015-07-17
相关资源
最近更新 更多