2010-11-16 2 views
0

Я пытаюсь повторно использовать некоторый скрипт, который у меня работает на другой странице, но я постоянно получаю сообщение об ошибке с этим.Ошибка JavaScript: объект не задан

У меня есть файл .js, называемый CalendarPopup.js. Это связанно с моим HTML как это:

<script type="text/javascript" src="/administrator/components/com_arrcard/js/CalendarPopup.js"></script> 

Это Java-библиотека, которая отображает календарь всплывающего пользователь может выбрать дату с моментом, когда они нажимают на ссылку. Затем значение вводится в поле. Вот код, который отображает поле и ссылку:

<tr id="birthDate"> 
<td align="left" valign="top"> 
    <script type="text/javascript"> 
    var calStart = new CalendarPopup("calendar"); 
    calStart.showNavigationDropdowns(); 
    </script> 
    Birth Date: 
</td> 

    <td> 
    <input style="width:124px;" type="text" name="birthdate" value="" /> 
    <a href="#" onclick="calStart.select(document.instantForm.birthdate,'anchorBirthdate','MM/dd/yyyy'); return false;" id="anchorBirthdate">select</a> 
    </td> 
</tr> 

Тогда есть DIV, что на самом деле держит календарь:

<div id="calendar" style="position:absolute;visibility:hidden; background-color:white; layer-background-color:white;"></div> 

Все это работает безупречно на одной странице, но на этом новом, я «получаю ошибку

CalendarPopup is not defined 

на этой линии:

var calStart = new CalendarPopup("calendar"); 

Что мне не хватает? Я уверен, что это что-то действительно очевидное, но я слишком долго смотрю на него и просто не вижу его.

+2

Вы что, вы включили JS-файл в новый файл? – Oded

+1

Убедитесь, что вы видите файл CalendarPopup в браузере/FireBug – wajiw

+0

@Oded, да, я уверен. @wajiw, когда я создаю источник просмотра и нажимаю ссылку в теге скрипта, он открывает файл CalendarPopup.js. – EmmyS

ответ

1

Убедитесь, что сценарий, определяющий класс CalendarPopup, находится там, где он выполняется до того, как какой-либо другой javascript ссылается на него.

+1

Я думаю, что это должна быть проблема. Чтобы разработать, EmmyS захочет использовать событие , или, лучше, событие, одна из популярных библиотек там, где есть готовые события документа. – Matt

+0

Я не могу использовать какие-либо события тела; это находится на сайте Joomla, и теги головы и тела генерируются, а не закодированы внутри страницы, в которой я работаю. – EmmyS

+0

@EmmyS Я знаю, что некоторые библиотеки поддерживают документальные «готовые» события, которые будут запускать правильное время независимо от того, о том, когда они указаны. Я знаю, что jQuery делает это. – Matt

0

Если источник файла JS такой же, как http://www.mattkruse.com/javascript/calendarpopup/source.html, то говорят, что вы должны включать в себя три других JS-файлы тоже
AnchorPosition.js
date.js
PopupWindow.js

Спасибо.

+0

Читайте немного дальше; он также говорит: «Или вы можете выбрать вариант« Комбинированный »выше, чтобы включить все необходимые файлы в один JS-файл». Мы используем комбинированный файл, содержащий весь необходимый код. И, как я сказал, это работает в других разделах сайта. – EmmyS

1

Вы можете добавить прослушиватель событий в окно и выполнить код, который использует файлы .js после их загрузки.

//Some js file 

window.addEventListener('load',onload,false); 


function onload(){ 

var x = new yourObject(); 
} 

Вы в настоящее время вызываете его перед его загрузкой, поэтому объект не определяет ошибку.

0

Проблема более чем вероятно, порядок загрузки вашего файла javascript.

Введите <script> тег включения в <head>, и все будет в порядке.

Смежные вопросы