Ошибка вызова jQuery на Page_Load

У меня есть следующий код для регистрации функции javascript на Page_Load (также пробовал на Page_Init). JavaScript переключает две панели со скрытых на отображаемые в зависимости от параметра при загрузке страницы:

    protected void Page_Load(object sender, EventArgs e)
    {
        String switchAction = "<script language='javascript'>switchactionpanel(" + (int)((Global.upAction)Enum.Parse(typeof(Global.upAction), Global.ProfileAction.ToString())) + ")</script>";
        Page.RegisterClientScriptBlock("switchaction", switchAction);
    }

Но когда страница загружается, я получаю сообщение об ошибке: $ не определено.

Я посмотрел в Firebug, и файлы jQuery загружаются, однако первый файл, который загружается на вкладке .Net, - это сама страница. Я знаю, что jquery правильный, так как тот же код работает на другой странице. Где должен быть размещен мой RegisterClientScriptBlock в жизненном цикле страницы, чтобы он работал правильно при загрузке страницы? Или я все неправильно делаю?


person mattgcon    schedule 16.05.2013    source источник


Ответы (3)


Вам просто нужно убедиться, что вставленный скрипт вставляется после ссылки JQuery.

Вместо этого используйте RegisterStartupScript, который вставляет тег скрипта перед закрывающим тегом </form>.

person McGarnagle    schedule 16.05.2013
comment
Большое спасибо, сработало отлично. Итак, чтобы понять это прямо, если я хочу запустить javascript после загрузки страницы, используйте вместо этого StartupScript правильно? это изменение не имеет ничего общего с моим кодом, верно? - person mattgcon; 17.05.2013

Не уверен, что это актуально, но я всегда использую: <script type="text/javascript"...

Извините, это должен был быть комментарий, а не ответ.

person km6zla    schedule 16.05.2013
comment
даже если это отсутствовало, все еще не исправило проблему. После того, как в Firebug выдается ошибка и страница загружается, я могу зайти в консоль Firebug и тогда $ работает нормально - person mattgcon; 17.05.2013
comment
Я понимаю. Я предполагаю, что когда вы просматриваете исходный код, этот скрипт вызывается перед файлом jQuery. Вам придется реорганизовать их так, чтобы скрипт jQuery вызывался первым, чтобы определить $. - person km6zla; 17.05.2013

Я думаю, что это связано с используемой вами функцией регистрации. Попробуйте использовать RegisterStartupScript вместо RegisterClientScriptBlock.

Page.ClientScript.RegisterStartupScript(this.GetType(), "switchaction", "<script language='javascript'>switchactionpanel(" + (int)((Global.upAction)Enum.Parse(typeof(Global.upAction), Global.ProfileAction.ToString())) + ")</script>", false);
person Steven V    schedule 16.05.2013
comment
спасибо, Стивен, хотя dbaseman опередил тебя, но еще раз спасибо - person mattgcon; 17.05.2013