2010-05-11 2 views
0

Вот сделка. У меня есть index.php, который ссылается на внутренний JS-файл в его заголовке. index.php затем включает другой файл .php, который выводит это: + добавить файл. addFile() - это функция Javascript, определенная во внешнем JS-файле.Включенный php-файл, вызывающий функцию Javascript

При этом ничего не происходит, включенный php не видит функцию JS. Инкапсуляция JS в включенном PHP делает все это работой. Но я не хочу так поступать.

Любые идеи?

EDIT:

вот источник

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <title>Archie</title> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
     <link rel="stylesheet" href="/screen.css" type="text/css" media="screen"/> 
     <script src="/lib/js/archie.js" type="text/javascript"></script> 
    </head> 
    <body> 
     ... 
     ... 
     //included php starts here 
     <form action="/lib/course.php" method="post"> 
      <fieldset> 
        <div id="addFileLocation"></div> 
       <a href="#" onClick="addFile()">+ add file</a>   
       <input type="hidden" id="addFileCount" value="0"/> 
      </fieldset> 
     </form> 
     //ends here 
     ... 
     ... 
    </body> 
    </html> 

и JS:

<script type="text/javascript"> 
    //Dynamically add form fields 

    //add file browser 
    function addFile() { 
     var location = document.getElementById('addFileLocation'); 
     var num = document.getElementById('addFileCount'); 
     var newnum = (document.getElementById('addFileCount').value -1)+ 2; 
     num.value = newnum; 
     var newname = 'addFile_'+newnum; 
     var newelement = document.createElement('input'); 
     newelement.setAttribute('name',newname); 
     newelement.setAttribute('type','file'); 
     location.appendChild(newelement); 
    } 

</script> 
+0

Ну, нам нужно увидеть источник, которому я верю. – Robus

ответ

0

Получено. Глупый я, я забыл удалить пару <script></script> из внешнего js-файла. Спасибо за вашу помощь Rich!

1

Вполне возможно, что этот файл не был "загружен" браузером в точке функция называется. Вот почему я использую функцию jQuery $ (document) .ready(). Если вы завершите свой вызов addFile в функции, подобной «готовому документу jQuery» (который просто ждет, пока весь документ не будет загружен браузером для выполнения js-кода), тогда все ваши функции должны быть там. Что происходит, когда вы ждете, пока все это будет загружено, а затем вручную вызовите эту функцию в адресной строке браузера?

1

Просмотрев образец кода, возможно, ваш href = "#" является коротким замыканием обработчика onClick. Что произойдет, если вы измените якорь на:

  <a href="javascript:addFile();">+ add file</a> 
+0

это работает, спасибо. не могли бы вы также рассказать мне, почему это происходит ?, это делает ссылку href первой, так что onClick никогда не будет выполнен? –

+0

мой плохой. он по-прежнему не работает –

+0

Обычно я устанавливаю операторы отладки в форме предупреждения в разных точках функции, чтобы сообщить мне, если я даже нахожусь в функции, и если она в какой-то момент держится. Итак, добавьте предупреждение («начало функции»); как первая строка func, а затем перед вызовом appendChild возможно оповещение о некотором свойстве newelement, чтобы увидеть его состояние и что ваша функция не вышла из строя с ошибкой и т. д. – Rich