JavaScript внутри PHP - PullRequest
       8

JavaScript внутри PHP

0 голосов
/ 04 декабря 2009

Следующий код не работает для меня

<body onload = "<?php 
foreach($arr as $a){
echo "<script language = javascript> popup_show(\''.$a.'\', \'popup_drag\', \'popup_exit\', \'screen-top-left\', 20,  20) <script>"; 
}
?>" >

Я даже попробовал это с предупреждением.

<body onload = "<?php 
foreach($arr as $a){
echo "<script language = javascript> alert('Hello') <script>"; 
}
?>" >

Даже это не сработало.

Мне нужно иметь возможность вызывать функцию popup_show для всех значений массива $ arr.

Спасибо за любую помощь. Я был бы очень признателен.

Ответы [ 3 ]

8 голосов
/ 04 декабря 2009

При размещении кода Javascript в обработчике событий (например, onload = "") вам не нужно включать теги HTML-сценариев.

Так что вам просто нужно:

<body onload = "popupshow(...)">

Ваш полный пример будет:

<body onload = "<?php 
foreach($arr as $a){
  echo "popup_show(\''.$a.'\', \'popup_drag\', \'popup_exit\', \'screen-top-left\', 20,  20)"; 
}
?>" >
4 голосов
/ 04 декабря 2009

Сбой, потому что это недопустимый HTML, когда он заканчивает вывод:

<body onload="<script language = javascript> alert('Hello') <script>">

Редактировать: Я полностью изменил свой ответ на основе поддержки от @ Джастин Джонсон

При использовании PHP для работы с JavaScript я стараюсь как можно скорее перейти на собственный JavaScript. Вместо того, чтобы пытаться echo сложных операторов JS из PHP, попробуйте передать данные в JS и позволить ему делать всю работу.

Кроме того, использование атрибутов события HTML (onload, onclick и т. Д.) Считается плохой формой. Лучше прикрепить ваше событие к объекту, используя IE attachEvent и W3 addEventListener.

<script type="text/javascript">
   // Store PHP array as JavaScript array in JS variable
   var messages = <?php echo json_encode($arr) ?>; // echos ["...","..."] etc.

   function trigger_popups(){
     for(var i = 0; i < messages.length; i++){
       popup_show( messages[i], 'popup_drag', 'popup_exit', 'screen-top-left', 20,  20);
     }
   }

   if(window.attachEvent)
      window.attachEvent('onload', trigger_popups); // IE
   else
      window.addEventListener('load', trigger_popups, true); // Other Browsers
</script>
1 голос
/ 04 декабря 2009

Вы создаете недопустимый HTML. Нельзя поместить элемент script (или любой другой элемент) в атрибут другого элемента HTML (в данном случае body).

<!-- This is not valid! -->
<body onload = "<script language = javascript> alert('Hello') <script>">

Атрибуты события принимают только javascript. Итак, вы могли бы сделать что-то вроде этого

<body onload = "alert('Hello')">

И это будет работать

Поскольку похоже, что вы хотите создавать команды JavaScript из массива данных, могу я предложить такой подход

<html>
<head>
  <script type="text/javascript">

  onload = function()
  {
  <?php 
    foreach($arr as $a)
    {
      echo "    popup_show('$a', 'popup_drag', 'popup_exit', 'screen-top-left', 20,  20);\n"; 
    }
  ?>
  }
  </script>
</head>
<body>
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...