Ошибка JavaScript, функция не определена, если она четко определена - PullRequest
0 голосов
/ 06 июля 2011

Итак, у меня есть страница, где PHP-скрипт отображает весь мой HTML, включая некоторый javascript.Предполагается, что рассматриваемая функция javascript выполняется при изменении поля выбора, но каждый раз, когда я изменяю поле выбора, в консоли javascript выдается сообщение о том, что функция не определена.

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

Вот функция PHP, ответственная за создание поля выбора:

function CreateMainSelect()
{
    $html = "<select name=\"main_select\" onChange=\"test()\" id=\"main_select\" >";
    $html .= "<option value='all'>All</option>";
    $html .= "<option value='past'>Past</option>";
    $html .= "<option value='current_and_future'>Current and Future</option>";
    $html .= "<option value='date_range'>Date Range</option>";
    $html .= "</select>";

    return $html;
}

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

А вот функция повторяющегося JavaScript:

echo '<script type="text/javascript">';
echo 'function test()';
echo '{';
echo 'alert("hello world");';
echo '}';
echo '</script>';

Javascript выводится в нижней части файла PHP.Я также пытался переместить его наверх, но это ничего не изменило.

РЕДАКТИРОВАТЬ: Спасибо за ответы всем, все ваши советы были очень полезны.Я разобрался в проблеме и целых две вещи пошли не так.Первая проблема заключалась в том, что мой браузер (я думаю, в любом случае) кэшировал мой javascript, так что вызывались более старые версии с ошибками моей функции, и именно поэтому появилась прекрасная функция для создания ошибок.Решена путем очистки моего кэша.

Другая проблема (я думаю) заключалась в том, что функция javascript фактически не загружалась до того, как выполнялась.Я решил эту проблему, поместив javascript в отдельный файл .JS и связав его с файлом .PHP.

Ответы [ 3 ]

3 голосов
/ 06 июля 2011

Кажется, здесь все работает отлично:

PHP: http://codepad.org/CGY47E1G

HTML: http://jsfiddle.net/maniator/9BCfv/

0 голосов
/ 06 июля 2011

Вы должны использовать HEREDOC s для создания этого javascript.Это избавляет вас от необходимости избегать всех внутренних кавычек.Если вы не интерполируете переменные PHP, вы можете использовать вариант NOWDOC , который сэкономит вам немного времени на компиляции PHP.

function CreateMainSelect() {
   $html = <<<EOL
<select name="main_select" onChange="test()" id="main_select" >
    <option value='all'>All</option>
    etc...
</select>
EOL;
   return $html;
}

echo <<<EOL
<script type="text/javascript">
    function test() {
        alert("hello world");
    }
</script>
EOL;

Гораздо проще читать ... ДажеЛучше было бы выйти из режима PHP для блока echo.Любой приличный редактор подсветки синтаксиса сможет распознать JavaScript и соответствующим образом его раскрасить.

0 голосов
/ 06 июля 2011

Ваши фрагменты кода выглядят безупречно (хотя я бы добавил новые строки в конце вашего эха, чтобы сделать результат более читабельным).Возможно, в другом месте вашего javascript есть ошибка, из-за которой ваша функция не загружается.

...