访问 $(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
}
}
})
});
我试图在 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
}
}
})
});