访问$(this)值返回未定义的jquery

时间:2020-01-21 11:23:25

标签: javascript jquery this jquery-select2

我正在尝试在select2初始化内访问$(this),但是它返回undefined

$(".tags").each(function() {
    var placeholder = "Select Email";
    if($(this).attr('name') === 'names[]')
        placeholder = "Select Name";
    $(this).select2({
        tags: true,
        placeholder: placeholder,
        language: {
            noResults: function () {
                return 'Type and enter to add new';
            },
        },
        escapeMarkup: function (markup) {
            return markup;
        },
        createTag: function(params) {
            console.log($(this).attr('name')); // returns undefined
            if (params.term.indexOf('@') === -1)
                return null;
            return {
                id: params.term,
                text: params.term
            }
        }
    })
});
为每个select2()初始化

.tags。我需要在此处的初始化内访问$(this)

我该怎么做?

2 个答案:

答案 0 :(得分:6)

您可以在调用$(this)之前保留对select2()的引用

$(".tags").each(function() {
    var placeholder = "Select Email";
    var $that = $(this);


    if($that.attr('name') === 'names[]')
        placeholder = "Select Name";
    $that.select2({
        tags: true,
        placeholder: placeholder,
        language: {
            noResults: function () {
                return 'Type and enter to add new';
            },
        },
        escapeMarkup: function (markup) {
            return markup;
        },
        createTag: function(params) {
            console.log($that.attr('name'));
            if (params.term.indexOf('@') === -1)
                return null;
            return {
                id: params.term,
                text: params.term
            }
        }
    })
});

希望这会有所帮助

答案 1 :(得分:4)

问题是因为createTag函数不在实例化select2的元素范围内运行。

要解决此问题,您需要保留对原始元素的引用,可以通过将其存储在each()处理程序中的变量中来完成:

$(".tags").each(function() {
  var $tag = $(this);

  // other logic...

  $tag.select2({
    // other logic...
    createTag: function(params) {
      console.log($tag.prop('name'));

      if (params.term.indexOf('@') === -1)
        return null;

      return {
        id: params.term,
        text: params.term
      }
    }
  })
});