【问题标题】:ERROR:TypeError: $(...).selectpicker is not a function loaded library using requirejsERROR:TypeError: $(...).selectpicker 不是使用 requirejs 的函数加载库
【发布时间】:2026-01-22 07:15:02
【问题描述】:

ERROR:TypeError: $(...).selectpicker is not a function 首次打开 Web 应用程序时发生错误。

在我的 app.js 中

需要js.config({ baseUrl: '', 路径:{ "jquery": "js/jquery", "jquery-ui": "js/jquery-ui", 文本:“库/文本”, //"css": "css", 车把:'js/车把', 时刻:“js/moment.min”, 引导程序:'js/bootstrap.min', somtjquery: '小部件/somt/js/somtjquery', 引导选择:'js/引导选择', utils: '小部件/somt/js/utils', filterwidget: '小部件/somt/js/filterwidget' }, 垫片:{ 车把:{ 出口:“车把” }, “引导”:{ 部门:['jquery'] }, //'bootstrapdatepicker':{deps: ['jquery','bootstrap']}, 'somtjquery':{ 部门:['jquery','utils','bootstrap'] }, “引导选择”:{ 部门:['jquery','bootstrap'] }, 'jquery':{ 出口:'$' }, “日期选择器”: { deps: ["jquery-ui", "bootstrap"], 出口:“$.fn.datepicker” }, “工具提示”:{ 部门:['jquery'], 出口:'$.fn.tooltip' }, '过滤器小部件':{ deps: ['jquery', "jquery-ui", "bootstrap", "bootstrapselect"], 出口:'filterwidget' } } }); 在 filterwidget.js 定义([“车把”,'hbs!widgets/somt/templates/pfilter'],功能(车把,过滤器){ var selector = "#somt-filter-area"; $(选择器).html(过滤器); $(函数选择日期选择器(){ 尝试 { $(selector).find('.selectpicker').selectpicker(); } 抓住 (e) { console.log("日期选择错误信息:" + e); } 尝试 { $(selector).find("#week").datepicker({ showOn: "按钮", buttonImage: "图片/通用日历月字形.svg", buttonImageOnly:真, 第一天:1, beforeShowDay:函数(日期){ 返回 [date.getDay() === weekofday, ""]; }, dayNamesMin: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], maxDate:当前截止日期, 日期格式:'mm/dd/yy' }); } 抓住 (e) { console.log("日期选择器错误信息:" + e); } }); });

特别是我在 Firefox 36 及以下版本中遇到了错误

【问题讨论】:

    标签: javascript jquery-ui requirejs


    【解决方案1】:

    您误解了如何使用 shim 。 Config 没有正确的 filterwidget 依赖项。使用 'shim' 必须仅用于非 amd 库。如果文件具有define 功能而不是它的amd 模块,并且该模块不需要shim。从shim删除这段代码:

    'filterwidget': {
            deps: ['jquery', "jquery-ui", "bootstrap", "bootstrapselect"],
            exports: 'filterwidget'
        }
    

    并在 filterwidget.js 中为 filterwidget 设置所有依赖项:

    define(['jquery', "jquery-ui", "bootstrap","bootstrapselect","handlebars",'hbs!widgets/somt/templates/pfilter']

    ps:同时从 shim 中删除 jquery、jquery-ui。这是 AMD 库。你怎么知道?只看图书馆的开头。例如'jquery-ui'。如果有这样的情况:

    if ( typeof define === "function" && define.amd ) {
    
        // AMD. Register as an anonymous module.
        define([ "jquery" ], factory );
    } else {
    
        // Browser globals
        factory( jQuery );
    }
    

    那么就不需要垫片了。

    【讨论】: