Не работает script во view yii2.

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Сергей2003
Сообщения: 72
Зарегистрирован: 2018.08.11, 11:07

Не работает script во view yii2.

Сообщение Сергей2003 » 2019.01.10, 22:27

Я только начинаю изучать применение 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>


Сергей2003
Сообщения: 72
Зарегистрирован: 2018.08.11, 11:07

Re: Не работает script во view yii2.

Сообщение Сергей2003 » 2019.01.11, 00:25

Не понял. Я изменил, получилось следующее.

Код: Выделить всё

<script>
    $(document).on('#test-form','beforeSubmit',function (e) {
        if (!confirm("Submit ?"))
            return false;
        alert('Работает!');
        return true;
    );
</script>
Но результат тот же, т.е. при нажатии на кнопку ничего не происходит. А я хочу, чтобы при нажатии на кнопку выдавалось сообщение "Работает !". Таким образом я буду знать, что попал в script. Может я что-то не понял. Прошу подскажите, пожалуйста.

Аватара пользователя
proctoleha
Сообщения: 259
Зарегистрирован: 2016.07.10, 19:00

Re: Не работает script во view yii2.

Сообщение proctoleha » 2019.01.11, 07:22

Вы вызываете JQuery $(document) до подключения собственно самого JQuery. Все скрипты подключаются в конце страницы. Изучайте тему
yii2 подключение js и css
Вот за что я не люблю линукс, так это за свои кривые, временами, руки

andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Не работает script во view yii2.

Сообщение andku83 » 2019.01.11, 13:23

http://api.jquery.com/on/

Код: Выделить всё

// in view
<?php $this->registerJs(<<<JS

JS);

Аватара пользователя
bemulima
Сообщения: 178
Зарегистрирован: 2012.12.20, 09:41
Откуда: Курган

Re: Не работает script во view yii2.

Сообщение bemulima » 2019.01.11, 17:47

Буквально так:

Код: Выделить всё

<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

Сергей2003
Сообщения: 72
Зарегистрирован: 2018.08.11, 11:07

Re: Не работает script во view yii2.

Сообщение Сергей2003 » 2019.01.12, 17:18

Всем большое спасибо за желание помочь. Я знаю, что 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;
}); 

Аватара пользователя
Dominus
Сообщения: 798
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Не работает script во view yii2.

Сообщение Dominus » 2019.01.12, 21:15

Сергей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;
});
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!

Сергей2003
Сообщения: 72
Зарегистрирован: 2018.08.11, 11:07

Re: Не работает script во view yii2.

Сообщение Сергей2003 » 2019.01.13, 03:28

$('#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;
    }
} 

Аватара пользователя
Dominus
Сообщения: 798
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Не работает script во view yii2.

Сообщение Dominus » 2019.01.13, 09:57

1. В консоли браузера посмотрите, нет ли ошибок js.
2. В исходном коде страницы, в браузере, убедитесь, подключаются ли скрипты. (перейдя по ссылке подключаемого скрипта)
Данный код:

Код: Выделить всё

$('#test-form').on('beforeSubmit',function () {
    if (!confirm('Submit'))
        return false;
    alert('Работает!');
    return true;
});
у меня работает.
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!

Сергей2003
Сообщения: 72
Зарегистрирован: 2018.08.11, 11:07

Re: Не работает script во view yii2.

Сообщение Сергей2003 » 2019.01.13, 13:06

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>

Аватара пользователя
Dominus
Сообщения: 798
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Не работает script во view yii2.

Сообщение Dominus » 2019.01.13, 13:32

Похоже что не корректно у вас настроен сервер, пути должны выглядеть без 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>
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!

Аватара пользователя
Dominus
Сообщения: 798
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Не работает script во view yii2.

Сообщение Dominus » 2019.01.13, 14:10

Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!

Сергей2003
Сообщения: 72
Зарегистрирован: 2018.08.11, 11:07

Re: Не работает script во view yii2.

Сообщение Сергей2003 » 2019.01.13, 22:38

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 не подключался. Я уже ничего не понимаю. Может я из ролика что-то упустил.

Аватара пользователя
Dominus
Сообщения: 798
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Не работает script во view yii2.

Сообщение Dominus » 2019.01.14, 00:14

Сергей2003 писал(а):
2019.01.13, 22:38
Не подскажете - где в настройках сервера указать, чтобы web не подключался. Я уже ничего не понимаю. Может я из ролика что-то упустил.
https://yadi.sk/i/F2bXYE-rlm0Z6Q
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!

Сергей2003
Сообщения: 72
Зарегистрирован: 2018.08.11, 11:07

Re: Не работает script во view yii2.

Сообщение Сергей2003 » 2019.01.14, 01:08

Я уже ничего не понимаю. 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>
В чем еще может быть проблема ? Я понимаю, что ничего уже не понимаю.

Аватара пользователя
Dominus
Сообщения: 798
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Не работает script во view yii2.

Сообщение Dominus » 2019.01.14, 07:18

А что по ошибкам в консоли?
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!

Сергей2003
Сообщения: 72
Зарегистрирован: 2018.08.11, 11:07

Re: Не работает script во view yii2.

Сообщение Сергей2003 » 2019.01.14, 08:43

Ошибка таже:
jscript.js:1 Uncaught SyntaxError: Invalid or unexpected token.
Не понятно почему. Все скобки на месте.

Аватара пользователя
Dominus
Сообщения: 798
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Не работает script во view yii2.

Сообщение Dominus » 2019.01.14, 09:13

Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!

Сергей2003
Сообщения: 72
Зарегистрирован: 2018.08.11, 11:07

Re: Не работает script во view yii2.

Сообщение Сергей2003 » 2019.01.14, 18:46

Dominus, огромнейшее Вам спасибо. Все заработало !!! Наконец-то !!! Ошибка была банальнейшая, я пропустил букву "e" в слове beforeSubmit. Я писал beforSubmit. Поэтому и была ошибка. Я решил удалить файл и заново создать jscript.js. Т.к. у меня уже раньше была ошибка - при открытии файла в обычном блокноте добавлялся невидимый символ. И тоже были проблемы. А когда начал писать beforeSubmit, то сразу натолкнулся на ошибку.
Спасибо, Dominus, также за то, что научили по ходу разбирательства ошибки многим нужным вещам.

Ответить