Как запустить функцию Javascript ПОСЛЕ загрузки страницы? - PullRequest
1 голос
/ 24 мая 2009

** РЕДАКТИРОВАТЬ **

Боюсь, я был не в правильном направлении - проблема не в том, о чем я спрашивал. Javascript работает как надо, это PHP, который не показывает то, что я хочу на первом «беге» - и я до сих пор не знаю, почему. Извините, что потратил немного времени ...

**

У меня есть форма, которая может содержать или не содержать данные в своих полях. Если пользователь достигает формы, и у него уже есть некоторые данные в системе, его идентификационный номер, например, появится в поле идентификатора - и будет запущена функция JavaScript onLoad отключит поле ввода и изменит его стиль:

<body onload="runFunction()">

проблема в том, что он запускается до того, как PHP сделает свое дело, и только если я обновлю страницу, функция JS сделает все, что я хочу (он отключает и стилизует некоторые другие поля формы, которые зависят от условия PHP).

Есть ли способ запустить эту функцию JS ПОСЛЕ отображения страницы? Я попытался запустить это перед закрытием страницы:

<body>
...
...
<script>
runFunction();
</script>
</body>
</html>

но безрезультатно.

есть идеи? Спасибо!

часть соответствующего кода PHP: [я удалил атрибуты id, чтобы облегчить чтение]

<?php if ($h_phone != '' && $h_phone_pre != '') {  
echo "<td class=\"input\"><input type=\"text\" id=\"new_user_home_tel\" value=\"$h_phone\" size=\"8\" maxlength=\"7\" disabled=\"disabled\" /> -  
<select id=\"new_user_home_tel_pre\" disabled=\"disabled\">  
  <option value=\"$h_phone_pre\" selected=\"selected\"></option>";

     } else {

echo '<td class="input"><input type="text" id="new_user_home_tel" size="8" maxlength="7" /> -  
 <select id="new_user_home_tel_pre">  
   <option value=" " selected="selected"></option>';
    }?>  <option value="02">02</option>
     <option value="03">03</option>
     <option value="04">04</option>
     <option value="08">08</option>
     <option value="09">09</option>
</select> 
</td>   

код Javascript просто меняет стиль, если поле не пустое, и это работает, но PHP работает только после обновления.

Ответы [ 9 ]

5 голосов
/ 24 мая 2009

Ваш Javascript работает после загрузки страницы, проблема в другом месте.

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

2 голосов
/ 24 мая 2009

JQuery делает это. Все, что находится внутри следующего, будет выполнено после отображения страницы:

$(document).ready(function() {
  //Call your function here
});
0 голосов
/ 04 февраля 2015

Я знаю, что это действительно поздно для этого поста, но причина, по которой это не работает, заключается в том, что PHP рендерит HTML, и тогда вы не можете взаимодействовать с ним снова (если вы не можете сделать некоторые изящные AJAX-вещи). Дело в том, что JS работает нормально, потому что это на стороне клиента, PHP не работает, потому что это на стороне сервера. Надеюсь, что это поможет любому, кто придет сюда!

0 голосов
/ 25 мая 2009

Боюсь, я был не в правильном направлении - проблема не в том, о чем я спрашивал. Javascript работает должным образом, это PHP, который не показывает то, что я хочу, при первом «запуске» - и я все еще не уверен, почему. Извините, что потратил немного времени ...

0 голосов
/ 24 мая 2009

Я бы посоветовал вам добавить свой контент в выходную переменную и затем повторить его в конце файла. Пример:

...
$output .= '<body onload="runFunction();">';
while(...)
{
   $output .= '...';
}
$output .= '</body>';
...
echo $output;
0 голосов
/ 24 мая 2009

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

0 голосов
/ 24 мая 2009

ответ не из библиотеки JS:

<script>
window.onload = function(){
 /* do stuff */
}
</script>

Однако использование JS-библиотеки, такой как JQuery, позаботится обо всех этих проблемах и проблемах с кросс-браузерными процессами.

Ваше право размещать ваши <script> блоки на конце тела. Это повышает производительность загрузки страницы, так как браузер блокирует его при попадании в блок <script>.

0 голосов
/ 24 мая 2009

Одним из способов является буферизация страницы в PHP. Это означает, что все сгенерированное уходит в память до тех пор, пока скрипт не завершит работу, а затем все сразу будет отправлено.

Взгляните на http://uk.php.net/ob_start

0 голосов
/ 24 мая 2009

Попробуйте атрибут "defer".

...