Наиболее вероятная причина сбоя заключается в том, что $(document).ready()
появляется перед тегом jQuery, включающим тег.
То, как или почему это не получится, зависит от того, как вы включаете файл, но один из способов решить эту проблему - использовать AddJavaScriptInclude()
BlogEngine.NET в статическом классе Utils
и добавить jQuery в класс BlogBasePage
. 'OnLoad
метод.
Например,
public abstract class BlogBasePage : System.Web.UI.Page
{
/* other BlogBasePage methods, properties, fileds, etc */
/// <summary>
/// Adds links and javascript to the HTML header tag.
/// </summary>
protected override void OnLoad(EventArgs e)
{
/* other BlogEngine.NET code ... */
// add jQuery to html <head> section. I've put my scripts
// in a folder named 'scripts'
AddJavaScriptInclude(Utils.RelativeWebRoot + "scripts/jquery-1.3.2.min.js", false, false);
}
}
Теперь jQuery будет включен в <head>
. Если у вас есть сценарий на главной странице, я бы посоветовал поместить его в <body>
, чтобы обеспечить включение сценария jQuery перед вашим кодом и избежать той же ситуации, что и раньше; если ваш скрипт находится в другом внешнем файле, вы можете использовать AddJavaScriptInclude()
, чтобы включить его и на страницу, просто убедитесь, что он добавлен после добавления файла jQuery.
Еще одна вещь, на которую следует обратить внимание, может быть целесообразно либо переименовать переменную $
в файле Blog.js и любых других js-файлах, которые поставляется вместе с BlogEngine.NET, либо использовать jQuery $.noConflict();
и затем оберните ваш код jQuery в самовозглашающуюся анонимную функцию, например так:
(function($) {
// I can still use $ here for shortahnd for jQuery.
$(document).ready(function() {
// code to run when the DOM has loaded
});
})(jQuery);
, чтобы вы все еще могли использовать сокращение $
для jQuery внутри функции.