访问 $(this) 值 returns 未定义 jquery

accessing $(this) value returns undefined jquery

我试图在 select2 初始化中访问 $(this),但是 returns 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)

我该怎么做?

您可以在调用 select2()

之前保留对 $(this) 的引用
$(".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
            }
        }
    })
});

希望对您有所帮助

问题是因为 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
      }
    }
  })
});