2009-05-08 2 views
0

У меня есть это в test.html:Из сценария вызова функции в .js файле

<script> 
    function h(){ 
     g(); 
    } 
<script> 

k.js имеет:

g(); 

В test.html я успешно вошел h() но не g(). Я добавил k.js в качестве тега сценария: scriptTag.src="k.js"

Не найдено g() все то же самое.

Что я делаю неправильно?

+0

Я уверен, что сценарий с источником k.js выше в dom, а затем «h()», потому что я проверил с помощью firebug. im также уверен, что k.js загружен перед вызовом h(), потому что im вызывает h(), когда im нажимает ссылку (якорный тег) из .html – 2009-05-08 18:37:42

+0

. Редактирую скрипт следующим образом: Функция h() { предупреждение ('1'); g(); предупреждение ('2'); } и он делает только первое предупреждение! – 2009-05-08 18:43:10

+0

PLS это очень срочно, и я уже провел 5 часов на нем ... – 2009-05-08 19:23:06

ответ

0

Вы обеспечили загрузку k.js до вызова h()?

Успешно ли найден k.js, и путь разрешен правильно?

0

Убедитесь, что функция, которую вы вызываете, выше в DOM, чем линия, вызывающая ее.

+0

Я уверен, что сценарий с источником k.js выше в dom, тогда «h()», потому что я проверил с помощью firebug. im также уверен, что k.js загружается перед вызовом h(), потому что im вызывает h(), когда im нажимает ссылку (тег привязки) из .html – 2009-05-08 18:43:39

0

I added k.js as a script tag [ scriptTag.src="k.js" ]

Похоже, что вы пишете свой скриптовый тег динамически? Если это так, убедитесь, что вы вставляете его в DOM, а затем ожидаете, когда браузер загрузит его, прежде чем вы попытаетесь получить от него что-либо. Просто создание узла сценария ничего не сделает, пока вы не введете его где-нибудь.

+0

. Я редактирую скрипт следующим образом: function h() {alert ('1 «); г(); предупреждение ('2'); }, и он делает только первое предупреждение! – 2009-05-08 19:20:14

0

Ваш код выглядит как-то вроде этого?

var scriptTag = document.createElement('script'); 
scriptTag.src = 'k.js'; 

Действительно, вы должны иметь эту линию:

scriptTag.type = 'text/javascript'; 

И как уже упоминалось ранее, скрипт должен быть вставлен в DOM. Эти две линии должны решить эту проблему:

var head = document.getElementsByTagName('head')[0]; 
head.appendChild(scriptTag); 

в результате:

var scriptTag = document.createElement('script'); 
scriptTag.src = 'k.js'; 
scriptTag.type = 'text/javascript'; 

var head = document.getElementsByTagName('head')[0]; 
head.appendChild(scriptTag); 

Теперь, почему вы не используете это?

<script type="text/javascript" src="k.js" /> 
+0

Я сделал это точно так: var scriptTag = document.createElement ('script'); scriptTag.src = 'k.js'; scriptTag.type = 'text/javascript'; var head = document.getElementsByTagName ('head') [0]; head.appendChild (scriptTag); , так как я добавляю его динамически ... – 2009-05-08 22:36:37

+0

И это сработало? – Eric

+0

печально нет. то я попытался вызвать g() из сценария на более низком уровне в dom в try и catch, и сообщение было «Ошибка ссылки: g не определена» – 2009-05-09 07:09:55

2

Вы сказали, что k.js имеет это:

g(); 

Это не действует функция для вызова, он просто пытается назвать g();, который до сих пор не определен.

Что k.js должны иметь что-то вроде этого:

function g() { alert('you called g()'); } 
1

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

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