“$ is not defined”老是报这个错,已经声明了内置的jq还是报错

讨论 已结
21 417
程序员一枚
悬赏:20飞吻
在main.js里声明了内置的jq,在其他js里加载main.js模块,但还是不能用$,报错“$ is not defined”,请各位大神帮忙解决!刚刚学习layui,可能这个问题比较白痴,搞了好久都没找到问题,跪求解决办法[悲伤]
回帖
  • @程序员一枚
    上面点预览的时候不小心提交回复了,请无视。
    手写代码,仅提供思路,不保证代码正确。
    定义:
    layui.define(['jquery', 'form', 'table'], function(exports){
    var $ = layui.jquery;

    var main = {
    jquery: layui.jquery,
    form: layui.form,
    table: layui.table,
    // 还可以写其他自定义方法或者变量
    };

    exports('main', main);
    });
    使用:
    layui.use(['main'], function(){
    var main = layui.main;

    var $ = main.jquery,
    form = main.form,
    table = main.table;

    //接下来是正常使用
    });
    如有必要还要写layui.base定义路径
    0 回复
  • 最好的办法就是不使用内置的jq,自己引用jquery
    1 回复
  • HiTerry
    2017-10-10
    你得上代码
    0 回复
  • 你是不是用的谁的模版啊,官方框架中不包含main.js更别提这是模块了。。。另外你的这个问题应该是部分升级2.x造成的,看看是不是有的地方用了$=layui.$,如果有就把他改成$=layui.jquery
    0 回复
  • 你这提问 是让我们在猜你的问题出在哪 没有意义的嘛 最基本你得有个截图吧。。
    0 回复
  • 我比较懒,直接引用layui.all.js,然后新建一个base.js,里面写上:
    var jQuery, $, form, layer, laydate;
    ! function() {
    //无需再执行layui.use()方法加载模块,直接使用即可
    $ = layui.$;
    jQuery = layui.jquery; //重点处

    form = layui.form,
    layer = layui.layer,
    laydate = layui.laydate;
    }();
    引入即可
    0 回复

  • 我的代码文件,请大家指教[悲伤]
    0 回复
  • @單克拉的眼淚 自己引用的话,岂不是每个页面都要引入,我的想法是建立一个公共的文件,里面放所有公共的依赖或者模块,这样用到的时候引入公共的就可以了,不然每个页面都要重新引入一次
    0 回复
  • @驊驊龔頾 main.js是我自己建的外部js
    0 回复
  • @HiTerry 贴了图,请指教
    0 回复
  • @你的屏幕有睫毛 我是想用模块化的方法开发,这个方法岂不是每个页面都要写上这一堆
    0 回复
  • @程序员一枚 不用啊,只需要在一个文件里写,引用就行了,例如我新建的base.js,我的引入方式:
    <script type="text/javascript" src="../layui/layui.all.js"></script>
    <script type="text/javascript" src="../js/base.js"></script>
    ,我不是前端,还是习惯这种传统的方式[嘻嘻]
    0 回复
  • 好吧,我还是想用模块化的方法,还是谢谢你的回答[嘻嘻]
    0 回复
  • 我也有过跟你一样的想法,把公共的引用和功能封装到一个js文件里进行引用,但是后来发现这样做其实并没有省很多事情,并且在文件夹层次多层的时候更加麻烦,于是放弃了这种做法。
    建议还是模块化的使用吧,其实就是几行代码而已,并不算多
    0 回复
  • @Rebuilding 好吧,暂且不讨论这个问题,可能还需要像sea.js或者require.js这样的框架配合使用才能实现。我最初的目的是不想每个页面都加载同一个依赖,比如jQuery,基本上每个页面的js都要用到jq,但是我把jq放在一个外部main.js里,再使用layui.use(['main'],function(exports){})并不能使用$,难道我要每个html都引入一遍jq吗?我没有找到相应的解决办法,所以来求助各位这个问题[悲伤]
    0 回复
  • @程序员一枚 按你说的应该是可以的。比如:
    layui.use(['main'], function(){
    var main = layui.main;

    var $ = main.jquery,
    form = main.form,
    layui.define(['jquery'], function(exports){
    var $ = layui.jquery;

    var main = {
    jquery: layui.jquery,
    form: layui.form,
    table: layui.table,
    // 还可以写其他自定义方法或者变量
    };

    exports('main', main);
    });
    = main.table;

    //接下来是正常使用
    });
    0 回复
  • @Rebuilding 非常感谢您提供的思路,我试一下
    0 回复
  • HiTerry
    2017-10-11
    <script>
    layui.config({
    base: '/static/layui/component/'
    }).use('main'); //加载入口
    </script>
    这样先加载是不是好点
    0 回复
  • @HiTerry 是这样写的,已经解决问题了,还是谢谢您的回答
    0 回复
  • @Rebuilding 修改了一下,实现了我的想法,谢谢您的回答
    0 回复
  • muxinss
    2017-10-14
    @單克拉的眼淚 我就是这么干的
    0 回复