如何在ajax参数内传递select2的$(this)

时间:2018-08-17 14:52:46

标签: javascript jquery jquery-select2

我需要在ajax中传递select2的$(this)来获取数据URL,例如下面的代码,$(this).data(“ url”)无法正常工作。

$(".select-ajax").select2({
    allowClear: $(this).data('allowclear') ? $(this).data('allowclear') : false,
    ajax: {
        url: $(this).data("url"),
        dataType: 'json',
        delay: 250,
        data: function(params) {
            return {
                q: params.term, // search term
                page: params.page
            };
        },
        processResults: function(data) {
            // parse the results into the format expected by Select2.
            // since we are using custom formatting functions we do not need to
            // alter the remote JSON data
            return {
                results: data
            };
        },
        cache: true
    },
    escapeMarkup: function(markup) {
        return markup;
    }, // let our custom formatter work
    templateResult: formatRepo,
    templateSelection: formatRepoSelection
});

2 个答案:

答案 0 :(得分:0)

处理这种情况和类似情况的最简单方法是设置要引用的常量。

const selectAjax = $(".select-ajax");
selectAjax.select2({
    allowClear: selectAjax.data('allowclear') ? selectAjax.data('allowclear') : false,
    ajax: {
        url: selectAjax.data("url"),
        dataType: 'json',
        delay: 250,
        data: function(params) {
            return {
                q: params.term, // search term
                page: params.page
            };
        },
        processResults: function(data) {
            // parse the results into the format expected by Select2.
            // since we are using custom formatting functions we do not need to
            // alter the remote JSON data
            return {
                results: data
            };
        },
        cache: true
    },
    escapeMarkup: function(markup) {
        return markup;
    }, // let our custom formatter work
    templateResult: formatRepo,
    templateSelection: formatRepoSelection
});

答案 1 :(得分:0)

您需要将this设置为变量。

var that = $(this);
that.select2({
   ...
   //other code
   url: $(that).attr("data-url")
   //other code
});