繁体   English   中英

为什么jQuery UI Widget在我的laravel应用程序中不起作用?

[英]why jquery UI Widgets doesn't work in my laravel application?

我有laravel应用程序,并尝试使用对话框小部件,但在控制台中不断出现此错误:

TypeError:$(...)。dialog不是函数[了解更多]

我试图测试正常的jquery函数,并且效果很好,它只是jquery UI。

    <head>

    <!-- CSRF Token -->
    <meta name="csrf-token" content="{{ csrf_token() }}">

    <title>{{ config('app.name', 'Laravel') }}</title>

    <!-- Styles -->
    <link href="{{ asset('css/app.css') }}" rel="stylesheet">

    <!-- Scripts -->
    <script>
        window.Laravel = {!! json_encode([
            'csrfToken' => csrf_token(),
        ]) !!};
    </script>
   <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
    <link rel="stylesheet" href="/resources/demos/style.css">
    <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>

    <script type="text/javascript">
    $( function() {
    $( "#dialog" ).dialog({
      autoOpen: false,
      show: {
        effect: "blind",
        duration: 1000
      },
      hide: {
        effect: "explode",
        duration: 1000
      }
    });

    $( ".opener" ).on( "click", function() {
      $( "#dialog" ).dialog( "open" );
    });
    } );
   </script>
     </head>


    <body>
     <div id="dialog" title="Basic dialog">
    <p>This is an animated dialog which is useful for displaying information.   The dialog window can be moved, resized and closed with the 'x' icon.</p>
     </div>

更新:

这些行之间存在冲突:

  <script src="{{ asset('js/app.js') }}"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>

但仍然无法删除其中任何一个。

更新2

webpack.mix.js

const { mix } = require('laravel-mix');

mix.js('resources/assets/js/app.js', 'public/js')
   .sass('resources/assets/sass/app.scss', 'public/css');

app.js

require('./bootstrap');

window.Vue = require('vue');

Vue.component('example', require('./components/Example.vue'));

const app = new Vue({
    el: '#app'
});

bootstrap.js

window._ = require('lodash');

try {
    window.$ = window.jQuery = require('jquery');

    require('bootstrap-sass');
} catch (e) {}

window.axios = require('axios');

window.axios.defaults.headers.common['X-CSRF-TOKEN'] = window.Laravel.csrfToken;
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

看到这个链接: https : //github.com/JeffreyWay/laravel-mix/blob/master/docs/jquery-ui.md

注意:我对Laravel Mix(webpack)还是陌生的,仍然在学习。

在链接的示例中,他的resources / assets / js / app.js包含以下行:

import $ from 'jquery';
window.$ = window.jQuery = $;

但就我而言,我正在编辑resources / assets / js / bootstrap.js ,其中包含以下行:

window.$ = window.jQuery = require('jquery');

所以我添加了小部件导入行:

import 'jquery-ui/ui/widgets/dialog.js';

编辑后,要运行Mix任务,我在项目根目录下运行了此命令: npm run dev

然后在我的Chrome浏览器中,在调用$(...)。dialog()的页面上,打开devtools控制台,然后右键单击浏览器页面重新加载图标,然后单击清空缓存并进行硬重新加载

由于我正在使用Laravel Mix(webpack),因此不需要包含特定于jquery的脚本标签和样式表链接。

您是否正在使用在webpack.mix.js文件中混合的.sass文件?

如果不是,请尝试将webpack.mix.js更改为此:

const { mix } = require('laravel-mix');

mix.js('resources/assets/js/app.js', 'public/js');

Laravel和Web开发的新手; 对我有用。

尝试在jquery-ui.js之前插入app.js。 这使得jquery-ui.js覆盖任何通用代码。 我发现它不会引起明显的副作用。 工具提示之类的某些项目看起来会有所不同,但是您可以根据需要修改链接的js文件以进行处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM