Да, вы можете вывести javascript внутри цикла PHP, который будет выполняться браузером при загрузке страницы.
Проблема в том, что у вас есть множество переменных, сталкивающихся. Вам нужно инкапсулировать каждый вывод этого тега сценария, чтобы этого не происходило. Вот одно предложение:
<script type="text/javascript">
<?php while(...): $l++; $linha = "#x" . $l; $linha2 = "x" . $l; ?>
(function($)
{
var mensagem = "<?= $mensagem; ?>",
id = "<?= $linha; ?>",
nextMsgOptions = {
msg: mensagem,
side: "bottomMiddle",
CSSClass: "nextMsg-LightTheme"
};
$(document).ready(function() {
$(id).click(function(){
$(id).nextMsg(nextMsgOptions);
});
});
})(jQuery);
<? endwhile; ?>
</script>
При этом каждая переменная $linha
и $mensagem
находится вдали друг от друга для каждой итерации цикла. Я думаю, что это происходит в вашем старом коде, вы устанавливаете $linha
для некоторой переменной и выводите id = <?= $linha; ?>
сколько бы раз ни выполнялся ваш цикл. Когда $(document).ready()
выполнялось для каждого выхода, $linha
уже интерпретировалось как последнее значение, которое вы выводите в цикле. Это заставило document.ready
присоединить событие N раз (N = количество итераций вашего цикла while) к одному и тому же элементу DOM (какой бы ни была последняя итерация вашего цикла while * $linha
). С помощью приведенного выше фрагмента каждая переменная id
и $linha
находится в пределах видимости и не зависит друг от друга, поэтому вам не нужно беспокоиться о столкновениях.
Я понимаю, что объяснение довольно запутанно, и его трудно понять; но в интерпретации / исполнении / определении содержания javascript есть специальные правила, которые не просто невероятно передать без примеров.