Javascript 在不中断未定义函数的情况下,对多个视图使用单个js文件

Javascript 在不中断未定义函数的情况下,对多个视图使用单个js文件,javascript,jquery,Javascript,Jquery,我的编辑后端只有一个js文件。问题是,对于视图A,我只需要少数几个方法;对于视图B,我需要另一组方法,但在两个页面上,我从不需要任何方法 我决定将两个视图的所有jquery放在一个文件中,但当选择器不可用且jquery的其余部分不再被解析时,它就会中断。这会导致页面无法使用 是否有一种方法可以使用单个jquery文件,其中包含所有视图的所有方法,即使存在未定义的函数异常 $("#mal_search").select2({ ajax: { url: "/api/mal/s

我的编辑后端只有一个js文件。问题是,对于视图A,我只需要少数几个方法;对于视图B,我需要另一组方法,但在两个页面上,我从不需要任何方法

我决定将两个视图的所有jquery放在一个文件中,但当选择器不可用且jquery的其余部分不再被解析时,它就会中断。这会导致页面无法使用

是否有一种方法可以使用单个jquery文件,其中包含所有视图的所有方法,即使存在未定义的函数异常

$("#mal_search").select2({
    ajax: {
        url: "/api/mal/search",
        dataType: 'json',
        delay: 250,
        data: function (params) {
            return {
                q: params.term, // search term
                page: params.page
            };
        },
        processResults: function (data, page) {
            // In case a single result is returned we put the
            // data object into an array otherwise select2 will
            // not be able to read the object
            if (!$.isArray(data)) {
                data = [data];
            }
            return {
                results: data
            };
        },
        cache: true
    },
    escapeMarkup: function (markup) {
        return markup;
    }, // let our custom formatter work
    minimumInputLength: 1,
    templateResult: formatRepo, // omitted for brevity, see the source of this page
    templateSelection: formatRepoSelection // omitted for brevity, see the source of this page
});

///////////////////////////////////
// The following doesn't work if the above method throws a is not a function exception
$('#filename-url-container').on('click', '.btn-add', function (e) {
    var formGroup = $('#filename-url-container > :first-child').first().clone(true);
    formGroup.find('input').val('');   // erase values
    $('#filename-url-container').append(formGroup);
    formGroup.closest('button.btn-add')
        .removeClass('btn-add').addClass('btn-remove')
        .removeClass('btn-success').addClass('btn-danger')
        .html('<span class="glyphicon glyphicon-minus"></span>');
}).on('click', '.btn-remove', function (e) {
    $(this).closest('.form-group').remove();
});
$(“#错误搜索”)。选择2({
阿贾克斯:{
url:“/api/mal/search”,
数据类型:“json”,
延误:250,
数据:函数(参数){
返回{
q:params.term,//搜索项
页码:params.page
};
},
processResults:函数(数据,页面){
//如果返回单个结果,我们将
//将数据对象放入数组中,否则将选择2
//无法读取对象
如果(!$.isArray(数据)){
数据=[数据];
}
返回{
结果:数据
};
},
缓存:真
},
转义标记:函数(标记){
返回标记;
},//让我们的自定义格式化程序工作
最小输入长度:1,
templateResult:formatRepo,//为简洁起见省略,请参阅此页的源代码
templateSelection:formatRepoSelection//略去为简洁起见,请参阅此页的源代码
});
///////////////////////////////////
//如果上述方法抛出一个非函数异常,则以下操作不起作用
$('#filename url container')。在('click','.btn add',函数(e){
var formGroup=$('#filename url container>:first child').first().clone(true);
formGroup.find('input').val('');//擦除值
$('#filename url container').append(formGroup);
formGroup.closest('button.btn add')
.removeClass('btn-add')。addClass('btn-remove'))
.removeClass('btn-success').addClass('btn-danger'))
.html(“”);
}).on('click','btn remove',函数(e){
$(this).closest('.form group').remove();
});

提升是指在定义函数/变量之前使用函数/变量,如链接中所述。提升本身并不是一个问题,但会导致代码泄漏全局变量,其他开发人员很难阅读。所以你不应该这么做,“但你可以”


关于分手。正如您知道哪些函数将在第1页上使用,哪些函数将在第2页上使用一样,请将它们放在文件page1.js和page2.js中,并将它们加载到页面上。您还可以将它们全部放在一个文件中,并具有一个startPage1函数和一个startPage2函数,可以根据需要启动页面。遗憾的是,如果没有更多的代码,我无法帮助您

使元素的代码帐户不可用,这样就不会抛出错误,也不会导致其他javascript无法执行。默认情况下,jQuery始终可以处理找不到选择器的情况。如果你想解决你的问题,你必须展示你的代码。我看不出你的代码与提升有什么关系。@Juhana那么我误解了解释。不管怎样,代码就要出现了。只需在每个块上包装一个函数,这样就不会有人在运行时查找缺少的内容。例如:
函数setupA(){…}函数setupB(){…}
最好将其分解为A、B和全部。