Страница 1 из 1
Не работает script во view yii2.
Добавлено: 2019.01.10, 22:27
Сергей2003
Я только начинаю изучать применение script в yii2. Написал простейший тест для проверки попадания в тело script. Но не срабатывает. Не выводит сообщение "Работает !" Подскажите, пожалуйста, что я не так делаю. Я пониманию, что возможно это глупый вопрос. Но все же прошу помочь.
Вот фрагмент view:
Код: Выделить всё
<div class="site-test">
<?php $form = ActiveForm::begin([
'id' => 'test-form',
'layout' => 'horizontal',
]); ?>
<?= $form->field($model, 'test')->input('Категории') ?>
<div class="form-group">
<?= Html::submitButton('Сохранить', ['class' => 'btn btn-primary',]) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
<script>
$(document).on("beforeSubmit","#test-form",function () {
alert('Работает !');
return false;
);
</script>
Re: Не работает script во view yii2.
Добавлено: 2019.01.10, 23:19
SiZE
Re: Не работает script во view yii2.
Добавлено: 2019.01.11, 00:25
Сергей2003
Не понял. Я изменил, получилось следующее.
Код: Выделить всё
<script>
$(document).on('#test-form','beforeSubmit',function (e) {
if (!confirm("Submit ?"))
return false;
alert('Работает!');
return true;
);
</script>
Но результат тот же, т.е. при нажатии на кнопку ничего не происходит. А я хочу, чтобы при нажатии на кнопку выдавалось сообщение "Работает !". Таким образом я буду знать, что попал в script. Может я что-то не понял. Прошу подскажите, пожалуйста.
Re: Не работает script во view yii2.
Добавлено: 2019.01.11, 07:22
proctoleha
Вы вызываете JQuery $(document) до подключения собственно самого JQuery. Все скрипты подключаются в конце страницы. Изучайте тему
yii2 подключение js и css
Re: Не работает script во view yii2.
Добавлено: 2019.01.11, 13:23
andku83
http://api.jquery.com/on/
Код: Выделить всё
// in view
<?php $this->registerJs(<<<JS
JS);
Re: Не работает script во view yii2.
Добавлено: 2019.01.11, 17:47
bemulima
Буквально так:
Код: Выделить всё
<div class="site-test">
<?php $form = ActiveForm::begin([
'id' => 'test-form',
'layout' => 'horizontal',
]); ?>
<?= $form->field($model, 'test')->input('Категории') ?>
<div class="form-group">
<?= Html::submitButton('Сохранить', ['class' => 'btn btn-primary',]) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
<?php
$js = "
$(document).on('#test-form','beforeSubmit',function (e) {
if (!confirm('Submit ?'))
return false;
alert('Работает!');
return true;
";
$this->registerJs($js);
Но такой метод подключения js кода для крайних случай. Лучше js код писать отдельно в js файле и подключить все css и js через AssetBundle
Re: Не работает script во view yii2.
Добавлено: 2019.01.12, 17:18
Сергей2003
Всем большое спасибо за желание помочь. Я знаю, что js код лучше писать отдельно в js файле и подключать все css и js через AssetBundle. В другом проекте я так и делал. И так же для проверки работы js кода выводил через alert тестовое сообщение. Все получалось. Почему сейчас не получается не понимаю. Я немного поменял код, но ничего так и не получается. Посмотрите, пожалуйста что не так. Может я что-то не подключил. Со стороны виднее.
Код view:
Код: Выделить всё
use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
?>
<div class="site-login">
<?php $form = ActiveForm::begin([
'id' => 'test-form',
'layout' => 'horizontal',
]); ?>
<?= $form->field($model, 'test')->input('Категории') ?>
<div class="form-group">
<?= Html::submitButton('Сохранить', ['class' => 'btn btn-primary',]) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
Код AppAsset:
Код: Выделить всё
namespace app\assets;
use yii\web\AssetBundle;
[code]class AppAsset extends AssetBundle
{
public $basePath = '@webroot';
public $baseUrl = '@web';
public $css = [
'css/site.css',
'css/style.css',
'/s/libs/fa/css/all.min.css'
];
public $js = [
'js/jscript.js',
];
public $depends = [
'yii\web\YiiAsset',
'yii\bootstrap\BootstrapPluginAsset',
// 'yii\bootstrap\BootstrapAsset',
];
}
Код jscript.js:
Код: Выделить всё
$(document).on('#test-form','beforeSubmit',function () {
if (!confirm('Submit'))
return false;
alert('Работает!');
return true;
});
Re: Не работает script во view yii2.
Добавлено: 2019.01.12, 21:15
Dominus
Сергей2003 писал(а): ↑2019.01.12, 17:18
Код jscript.js:
Код: Выделить всё
$(document).on('#test-form','beforeSubmit',function () {
if (!confirm('Submit'))
return false;
alert('Работает!');
return true;
});
Код: Выделить всё
$('#test-form').on('beforeSubmit',function () {
if (!confirm('Submit'))
return false;
alert('Работает!');
return true;
});
Re: Не работает script во view yii2.
Добавлено: 2019.01.13, 03:28
Сергей2003
$('#test-form').on('beforeSubmit',function () {
if (!confirm('Submit'))
return false;
alert('Работает!');
return true;
});
Заменил текст в jscript.js предложенным текстом. Сообщение alert так и не появилось. Я понял дело в том, наверно, что я не правильно формирую условие выполнения скрипта. Потому, что когда я вставляю во view следующий скрипт, то он срабатывает:
Код: Выделить всё
<?php
$js = <<< JS
alert('Работает!');
JS;
$this->registerJs($js, yii\web\View::POS_READY);
?>
Подскажите, пожалуйста, что может быть не так. Может что-то с моделью. Вот код модели:
Код: Выделить всё
namespace app\models;
use Yii;
use yii\base\Model;
class TestForm extends Model
{
public $test;
public function rules()
{
return [
['test', 'string'],
];
}
public function test()
{
return true;
}
}
Re: Не работает script во view yii2.
Добавлено: 2019.01.13, 09:57
Dominus
1. В консоли браузера посмотрите, нет ли ошибок js.
2. В исходном коде страницы, в браузере, убедитесь, подключаются ли скрипты. (перейдя по ссылке подключаемого скрипта)
Данный код:
Код: Выделить всё
$('#test-form').on('beforeSubmit',function () {
if (!confirm('Submit'))
return false;
alert('Работает!');
return true;
});
у меня работает.
Re: Не работает script во view yii2.
Добавлено: 2019.01.13, 13:06
Сергей2003
1. В консоли браузера посмотрите, нет ли ошибок js.
2. В исходном коде страницы, в браузере, убедитесь, подключаются ли скрипты. (перейдя по ссылке подключаемого скрипта)
Итак что получилось.
1. Ошибка js. Похоже в 1-ой строке. Не пойму почему.
Код: Выделить всё
jscript.js:1 Uncaught SyntaxError: Invalid or unexpected token
2. Похоже скрипты подключились:
Код: Выделить всё
</script><script src="/web/assets/de5d977/jquery.js"></script>
<script src="/web/assets/8d55fabb/yii.js"></script>
<script src="/web/assets/8d55fabb/yii.validation.js"></script>
<script src="/web/assets/8d55fabb/yii.activeForm.js"></script>
<script src="/web/js/jscript.js"></script>
<script src="/web/assets/13c84f7b/js/bootstrap.js"></script>
<script>jQuery(function ($) {
jQuery('#test-form').yiiActiveForm([{"id":"testform-test","name":"test","container":".field-testform-test","input":"#testform-test","error":".help-block.help-block-error","validate":function (attribute, value, messages, deferred, $form) {yii.validation.string(value, messages, {"message":"Test must be a string.","skipOnEmpty":1});}}], []);
});</script></body>
</html>
Re: Не работает script во view yii2.
Добавлено: 2019.01.13, 13:32
Dominus
Похоже что не корректно у вас настроен сервер, пути должны выглядеть без web, так:
Код: Выделить всё
<script src="/assets/fe8adc92/jquery.js"></script>
<script src="/assets/a1c7f9ac/yii.js"></script>
<script src="/js/jscript.js"></script>
<script src="/assets/34d5e6c7/js/bootstrap.js"></script>
Укажите на сервере в качестве корня, директорию web, или используйте .htaccess
Для basic
.htaccess в корне проекта:
Код: Выделить всё
# Mod_Autoindex
<IfModule mod_autoindex.c>
# Disable Indexes
Options -Indexes
</IfModule>
# Mod_Rewrite
<IfModule mod_rewrite.c>
# Enable symlinks
Options +FollowSymlinks
# Enable mod_rewrite
RewriteEngine On
# Redirect all requests to web
RewriteCond %{REQUEST_URI} ^(.*)$
RewriteRule ^(.*)$ web/$1
</IfModule>
.htaccess в директории web:
Код: Выделить всё
AddDefaultCharset utf-8
# Mod_Autoindex
<IfModule mod_autoindex.c>
# Disable indexes
Options -Indexes
</IfModule>
# Mod_Rewrite
<IfModule mod_rewrite.c>
# Enable symlinks
Options +FollowSymlinks
# Enable mod_rewrite
RewriteEngine On
# If a directory or a file exists, use the request directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward the request to index.php
RewriteRule . index.php
</IfModule>
Re: Не работает script во view yii2.
Добавлено: 2019.01.13, 14:10
Dominus
Re: Не работает script во view yii2.
Добавлено: 2019.01.13, 22:38
Сергей2003
Dominus, спасибо Вам большое за попытки мне помочь. Но у меня все равно ничего не выходит. Не могу настроить сервер, чтобы пути были были без web. Я уже и open server переустановил, и yii2-basic заново установил, и .htaccess Ваши записал. Единственное - это запуск сайта без web. Но скрипты все равно подключаются с web:
Код: Выделить всё
</script><script src="/web/assets/35a65248/jquery.js"></script>
<script src="/web/assets/ec880894/yii.js"></script>
<script src="/web/assets/ec880894/yii.validation.js"></script>
<script src="/web/assets/ec880894/yii.activeForm.js"></script>
<script src="/web/js/jscript.js"></script>
<script src="/web/assets/66cc2062/js/bootstrap.js"></script>
<script>jQuery(function ($) {
jQuery('#test-form').yiiActiveForm([{"id":"loginform-username","name":"username","container":".field-loginform-username","input":"#loginform-username","error":".help-block.help-block-error","validate":function (attribute, value, messages, deferred, $form) {yii.validation.required(value, messages, {"message":"Username cannot be blank."});}},{"id":"loginform-password","name":"password","container":".field-loginform-password","input":"#loginform-password","error":".help-block.help-block-error","validate":function (attribute, value, messages, deferred, $form) {yii.validation.required(value, messages, {"message":"Password cannot be blank."});}},{"id":"loginform-rememberme","name":"rememberMe","container":".field-loginform-rememberme","input":"#loginform-rememberme","error":".help-block.help-block-error","validate":function (attribute, value, messages, deferred, $form) {yii.validation.boolean(value, messages, {"trueValue":"1","falseValue":"0","message":"Remember Me must be either \"1\" or \"0\".","skipOnEmpty":1});}}], []);
});</script>
Не подскажете - где в настройках сервера указать, чтобы web не подключался. Я уже ничего не понимаю. Может я из ролика что-то упустил.
Re: Не работает script во view yii2.
Добавлено: 2019.01.14, 00:14
Dominus
Сергей2003 писал(а): ↑2019.01.13, 22:38
Не подскажете - где в настройках сервера указать, чтобы web не подключался. Я уже ничего не понимаю. Может я из ролика что-то упустил.
https://yadi.sk/i/F2bXYE-rlm0Z6Q
Re: Не работает script во view yii2.
Добавлено: 2019.01.14, 01:08
Сергей2003
Я уже ничего не понимаю. Dominus, все сделал как Вы показали, но сообщение так и не показывается.
Вот, что получилось. Код страницы:
Код: Выделить всё
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-param" content="_csrf">
<meta name="csrf-token" content="4egIkF3gimXY_JaoECXEXh92RzN5G4jjsm1BB-8QliOvhXijGpfdKLOl3sskEP0RWUYlVRNq4ovbJ3dtmVzOQQ==">
<title>My Yii Application</title>
<link href="/assets/66cc2062/css/bootstrap.css" rel="stylesheet">
<link href="/css/site.css" rel="stylesheet"><script type="text/javascript" src="http://gc.kis.v2.scr.kaspersky-labs.com/B8EE194C-1D1A-BF4E-9AAF-69853FCCFE62/main.js" charset="UTF-8"></script></head>
Код: Выделить всё
</script><script src="/assets/35a65248/jquery.js"></script>
<script src="/assets/ec880894/yii.js"></script>
<script src="/js/jscript.js"></script>
<script src="/assets/66cc2062/js/bootstrap.js"></script>
В чем еще может быть проблема ? Я понимаю, что ничего уже не понимаю.
Re: Не работает script во view yii2.
Добавлено: 2019.01.14, 07:18
Dominus
А что по ошибкам в консоли?
Re: Не работает script во view yii2.
Добавлено: 2019.01.14, 08:43
Сергей2003
Ошибка таже:
jscript.js:1 Uncaught SyntaxError: Invalid or unexpected token.
Не понятно почему. Все скобки на месте.
Re: Не работает script во view yii2.
Добавлено: 2019.01.14, 09:13
Dominus
Re: Не работает script во view yii2.
Добавлено: 2019.01.14, 18:46
Сергей2003
Dominus, огромнейшее Вам спасибо. Все заработало !!! Наконец-то !!! Ошибка была банальнейшая, я пропустил букву "e" в слове beforeSubmit. Я писал beforSubmit. Поэтому и была ошибка. Я решил удалить файл и заново создать jscript.js. Т.к. у меня уже раньше была ошибка - при открытии файла в обычном блокноте добавлялся невидимый символ. И тоже были проблемы. А когда начал писать beforeSubmit, то сразу натолкнулся на ошибку.
Спасибо, Dominus, также за то, что научили по ходу разбирательства ошибки многим нужным вещам.