$(document.body).append() не работает в IE

Я перенаправляю своего пользователя на мой default.aspx, когда срок его сеанса истекает, а на главную страницу ссылается страница по умолчанию. Я показываю уведомление, подобное твиттеру, в котором говорится, что Session Expired что происходит, если оно отлично работает в Firefox и Google Chrome, но не в IE. я получаю Internet Explorer cannot open site-http://localhost:1335/order/Default.aspx?Sid=1 Operation aborted

Я погуглил это и обнаружил, что $(document.body).append() перед тегом body было проблемой, если я переместил скрипт в нижнюю часть своей страницы, мое уведомление не работает ни в одном браузере.

Вот моя мастер-страница,

<head runat="server">
    <title></title>

    <script src="Javascript/Jquery1.4.js" type="text/javascript"></script>

    <script type="text/javascript">
        function topBar(message) {
            $("#alertmsg").remove();
            var $alertdiv = $('<div id = "alertmsg"/>');
            $alertdiv.text(message);
            $alertdiv.bind('click', function() {
                $(this).slideUp(200);
            });
            $(document.body).append($alertdiv);
            $("#alertmsg").slideDown("slow");
            setTimeout(function() { $alertdiv.slideUp(200); }, 5000);
        }
    </script>

    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
</head>
<body>

и моя функция верхней панели вызывается на моей странице default.aspx,

protected void Page_Load(object sender, EventArgs e)
{
    Int64 id = GetId(Request.RawUrl.ToString());
  if (id == 1)
  {
    ScriptManager.RegisterClientScriptBlock(Page, this.GetType(), "json", "topBar('Session Expired');", true);
  }
}

person ACP    schedule 19.08.2010    source источник
comment
Когда вызывается функция topBar?   -  person casablanca    schedule 19.08.2010
comment
@casablanca я обновил свой вопрос.   -  person ACP    schedule 19.08.2010
comment
Я не знаком с ASP.NET. Можете ли вы взглянуть на сгенерированный исходный код страницы и увидеть, где на самом деле вызывается функция? Возможно, он вызывается слишком рано, т. е. до того, как будет проанализировано тело.   -  person casablanca    schedule 19.08.2010
comment
Ответ @casablanca Чарли сработал.   -  person ACP    schedule 19.08.2010


Ответы (1)


Я не смог найти место, где вызывается topBar, но если я вызову его из $(document).ready(), в моем IE8 это сработает как шарм:

<script type="text/javascript"> 
    function topBar(message) { 
        $("#alertmsg").remove(); 
        var $alertdiv = $('<div id = "alertmsg"/>'); 
        $alertdiv.text(message); 
        $alertdiv.bind('click', function() { 
            $(this).slideUp(200); 
        }); 
        $(document.body).append($alertdiv); 
        $("#alertmsg").slideDown("slow"); 
        setTimeout(function() { $alertdiv.slideUp(200); }, 5000);
    }

    $(document).ready(function() {
        topBar("Hello world!");
    });
</script> 

Вы также можете использовать $(window).load(), если у вас есть графика и/или другие тяжелые элементы, которые необходимо загрузить до вызова topBar():

$(window).load(function() {
    topBar("Hello world!");
});

Надеюсь, поможет.

ИЗМЕНИТЬ:


Может быть, это может помочь? В принципе, вы можете сделать что-то вроде этого:

ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "json",  
    @"$(document).ready(function(){   
             topBar("Hello world!");
             }); 
        });", true); 

Ознакомьтесь с ответом по ссылке, потому что он дает пару альтернатив

person Karl Johan    schedule 19.08.2010
comment
Я ответил до того, как было внесено редактирование о том, где была вызвана функция, поскольку я только что исследовал, чтобы иметь возможность обновить свой ответ, я получил отрицательный голос без каких-либо объяснений. Я полагаю, что это не отвечает на вопрос в том виде, в каком он поставлен сейчас, но с учетом информации, которую я получил в то время, я думаю, что это правильный ответ. - person Karl Johan; 19.08.2010
comment
я отредактировал вопрос за 4 минуты до того, как вы опубликовали этот ответ - person ACP; 19.08.2010
comment
Может быть, мой набор текста не самый быстрый, и мне нужно было проверить результат? Во всяком случае, никаких обид. Я обновил свой ответ, надеюсь, он поможет вам. - person Karl Johan; 19.08.2010
comment
ваш ответ сработал. Извините за изначальное голосование против, потому что я знал ответ, который вы дали до обновления. В любом случае, спасибо, мужик, никаких обид. - person ACP; 19.08.2010
comment
Без проблем! я рад, что смог помочь - person Karl Johan; 19.08.2010