Select2 добавить значок изображения в опцию динамически
Это то, что select2.гитуб.io дает вам:
function addIcons(opt) {
if (!opt.id) {
return opt.text;
}
var $opt = $(
'<span><img src="/images/flags/' + opt.element.value.toLowerCase() + '.png" class="img-flag" /> ' + opt.text + '</span>'
);
return $opt;
}
Я хотел бы добавить атрибут data-image в мои параметры:
<option value="flag" data-image="/images/flags/flag.png">Country 1</option>
и войдите в функцию:
function addIcons(opt) {
if (!opt.id) {
return opt.text;
}
var optimage = opt.attr('data-image');
var $opt = $(
'<span><img src="/images/flags/' + optimage + '" class="img-flag" /> ' + opt.text + '</span>'
);
return $opt;
}
к сожалению, простая консоль.log (opt); ничего не возвращает в функции, поэтому я не вижу, могу ли я получить доступ к атрибуту data-image. Приведенный выше блок кода возвращает ошибку, поэтому это, очевидно, не работает. Есть предложения по этому вопросу?
5 ответов
решена с помощью attr
и протестировано на Select2 4.0.6-rc.0.
$(".class").select2({
templateResult: formatState,
templateSelection: formatState
});
function formatState (opt) {
if (!opt.id) {
return opt.text.toUpperCase();
}
var optimage = $(opt.element).attr('data-image');
console.log(optimage)
if(!optimage){
return opt.text.toUpperCase();
} else {
var $opt = $(
'<span><img src="' + optimage + '" width="60px" /> ' + opt.text.toUpperCase() + '</span>'
);
return $opt;
}
};
Если optimage возвращает "undefined", попробуйте мой образец: он работает нормально:
$("#selectUserForChat").select2({
templateResult: addUserPic,
templateSelection: addUserPic
});
function addUserPic (opt) {
if (!opt.id) {
return opt.text;
}
var optimage = $(opt.element).data('image');
if(!optimage){
return opt.text;
} else {
var $opt = $(
'<span class="userName"><img src="' + optimage + '" class="userPic" /> ' + $(opt.element).text() + '</span>'
);
return $opt;
}
};
Я решил проблему с этим кодом:var optimage = $(opt.element).data('image');
$(".category").select2({
templateResult: formatState,
templateSelection: formatState
});
function formatState (opt) {
if (!opt.id) {
return opt.text;
}
var optimage = $(opt.element).data('image');
if(!optimage){
return opt.text;
} else {
var $opt = $(
'<span><img src="' + optimage + '" width="23px" /> ' + opt.text + '</span>'
);
return $opt;
}
};
попробуйте это:
var optimage = $(opt).data('image'); //or $(opt).attr('data-image')
var $opt = $(
'<span><img src="' + optimage + '" class="img-flag" /> ' + $(opt).text() + '</span>'
);
не обязательно связано с вопросом, но в моем случае он не работал, потому что если вы используете Select 2 templateResult и templateSelection
не существует. Использовать formatResult
и .