Javascript, работает только с обработчиком событий

Каждый раз, когда моя страница загружается, я хочу, чтобы какой-то javascript выполнялся, если новое сообщение находится в TempData.

window.onload = function () {  
      $.jGrowl('Hello world!');
};

И это прекрасно работает. Но нужно ли мне помещать вызов в windows.onload или другие обработчики событий, потому что, если я сделаю это так

<script type="text/javascript>
$.jGrowl('Hello world!');
</script>

это не сработает

SCRIPT438: Object doesn't support this property or method

Я пытался поместить javascript в нижнюю часть страницы, чтобы убедиться, что все остальное загружается первым.

Надеюсь на помощь Джейкоб


person Jakobbbb    schedule 23.06.2014    source источник
comment
Определить не работает. Есть ли ошибка в консоли отладки? Наиболее распространенная причина этого заключается в том, что $ не определено в то время, когда вы пытаетесь запустить эту строку кода. Это?   -  person David    schedule 23.06.2014
comment
это не сработает, не описывает вашу проблему. Что вы ожидаете от своего кода и что он делает вместо этого?   -  person Teemu    schedule 23.06.2014
comment
Я отредактировал свой пост с описанием проблемы   -  person Jakobbbb    schedule 23.06.2014
comment
Вероятно, где-то после загрузки вашего плагина должно сработать.   -  person Shanimal    schedule 23.06.2014
comment
Может быть, это недостающая закрывающая кавычка в атрибуте типа?   -  person Shanimal    schedule 23.06.2014
comment
Отсутствующая закрывающая цитата - просто опечатка :)   -  person Jakobbbb    schedule 23.06.2014
comment
Теперь нужно поместить его чуть выше ‹/body›‹/html›, и он все еще дает скрипт438.   -  person Jakobbbb    schedule 23.06.2014


Ответы (2)


https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers.onload

Проблема в том, что код срабатывает до загрузки DOM.

Вот соответствующая статья.. window.onload vs document.onload

person Community    schedule 23.06.2014
comment
Требует ли jGrowl загрузки DOM перед тем, как его можно будет использовать? - person JLRishe; 23.06.2014
comment
Это может быть так. Что DOM должен быть загружен, прежде чем вы сможете манипулировать им - person Jakobbbb; 23.06.2014

Согласно их примеру это должно работать отлично... Я попытался развернуть вызов, лучший Я мог бы сделать, это удалить внешнюю самоисполняющуюся функцию...

<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/jquery-jgrowl/1.2.12/jquery.jgrowl.min.css" />
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-jgrowl/1.2.12/jquery.jgrowl.min.js"></script>
<script type="text/javascript">
$(function(){
    $.jGrowl("Hello world!");
});
</script>

Я предполагаю, что библиотека использует dom ready, поэтому она недоступна для jquery до тех пор, пока не будет выполнено dom ready.

Вот JSBIN

person Shanimal    schedule 23.06.2014
comment
Хорошо, я узнал, в чем была проблема. Он не загрузил библиотеку jgrowl. Почему это сработало при загрузке, я понятия не имею. Но сейчас работает. Спасибо за все отклики - person Jakobbbb; 23.06.2014