Опытным путем было выяснено, что пока Yii не подгрузит jQuery (а делает он это в последнюю очередь), мой скрипт работать не будет, потому что $ ему в тот момент еще не знаком.
В интернете был вычитан способ исправить ситуацию вот так:
'position' => \yii\web\View::POS_HEAD
Что, собственно, помогло, но поломало все остальное (в моем случае это многоуровневое меню).
Далее был испробован другой способ:
$this->registerJs(
'вот тут мой код с js');
Что заставило работать меню, но не повлияло на мой скрипт.
Можно было бы вынести скрипт в отдельный файлик и в его настройках указывать подключение в последнюю очередь, однако в моем велосипедном JS используется php и конкатенация (я так переменную туда передаю), поэтому не вижу ничего хорошего в том, чтобы выносить это в отдельный файл.
Как наговнокодить получше и так, чтобы работало и меню и мое чудо-колесо?
Попробовала также обернуть JS в
jQuery(window).load()
На что получила - uncaught ReferenceError: jQuery is not defined.
Код скрипта:
<script type="text/javascript">
$(document).ready(function(){
var water = <?= $count['full']*250 ?>; //устанавливаем значение переменной, если пользователь уже пил воду в мл.
$(".off, .on").click(function(){ //меняем класс офф на он
$(this).toggleClass("off on");
if($(this).hasClass("on")){
water += 250; //прибавляем к переменной еще 250 мл.
$.ajax({
type: "POST",
url: "<?php echo \Yii::$app->getUrlManager()->createUrl('site/index') ?>",
data: "water=" + water,
_csrf : '<?=Yii::$app->request->getCsrfToken()?>'
});
} if ($(this).hasClass("off")) {
water -= 250; //если пользователь ошибся и кликнул еще раз на стакан - отнимаем 250 мл.
$.ajax({
type: "POST",
url: "<?php echo \Yii::$app->getUrlManager()->createUrl('site/index') ?>",
data: "water=" + water,
_csrf : '<?=Yii::$app->request->getCsrfToken()?>'
});
}
});
})
<?php
$count = $count['full']*250;
$url = Yii::$app->getUrlManager()->createUrl('site/index');
$script = <<< JS
$(document).ready(function(){
var water = $count;
$(".off, .on").click(function(){
$(this).toggleClass("off on");
if($(this).hasClass("on")){
water += 250;
$.ajax({
type: "POST",
url: "$url",
data: "water=" + water
});
} if ($(this).hasClass("off")) {
water -= 250;
$.ajax({
type: "POST",
url: "$url",
data: "water=" + water
});
}
});
})
JS;
$this->registerJs($script, yii\web\View::POS_END);
?>
В итоге помог все же метод registerJs. Полный код приведен внизу в теле вопроса.
Замечания, которые пригодились бы мне:
http://www.yiiframework.com/doc-2.0/yii-web-view.html#registerJs()-detail
(а не просто скопировать из интернета, потому что у кого-то сработал именно READY, например).
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Доброго времени суток! У меня на странице есть 4 блока у которых есть свой 'id', по которому я перехожу с другой страницы нажимая на ссылку типа...
Всем доброго времени сутокПросьба - советом и "образцами кода" наставить на путь истины