使用 jQuery UI 的 Selectmenu 保留图片
Keep picture with Selectmenu of jQuery UI
我使用 jquery UI - Select 菜单来构建带图片的列表。
我关注 this link,这很好。
但是当你 select 一个项目时,复制的只是文本,而不是图片。
我解释为什么我想要图片。我有一个没有文字的列表,只有图片,然后当你选择一个项目时,你会看到一个空的跨度......
有人有想法吗?
这是我的代码
<script type="text/javascript">
$(function () {
$.widget("custom.iconselectmenu", $.ui.selectmenu, {
_renderItem: function (ul, item) {
var li = $("<li>", { html: item.element.html() });
var attr = item.element.attr("data-style");
if (typeof attr !== typeof undefined && attr !== false) {
$("<span>", {
style: item.element.attr("data-style"),
"class": "ui-icon TFOOptlstFiltreImg"
}).appendTo(li);
}
return li.appendTo(ul);
}
});
$("#people")
.iconselectmenu().iconselectmenu("menuWidget").addClass("ui-menu-icons");
});
</script>
<style type="text/css">
select
{
width: 200px;
}
</style>
<select name="people" id="people">
<option value="1" data-style="background-image: url('http://www.gravatar.com/avatar/b3e04a46e85ad3e165d66f5d927eb609?d=monsterid&r=g&s=16');">John Resig</option>
<option value="2" data-style="background-image: url('http://www.gravatar.com/avatar/e42b1e5c7cfd2be0933e696e292a4d5f?d=monsterid&r=g&s=16');">Tauren Mills</option>
<option value="3" data-style="background-image: url('http://www.gravatar.com/avatar/bdeaec11dd663f26fa58ced0eb7facc8?d=monsterid&r=g&s=16');">Jane Doe</option>
</select>
这个解决方案运行 ok
在这里,我在项目中只有文本或只有图片。永远不会同时出现。
<script type="text/javascript">
$(function () {
$.widget("custom.TFOiconSelectImg", $.ui.selectmenu, {
_renderItem: function (ul, item) {
var li = $("<li>", { html: item.element.html() });
var attr = item.element.attr("data-style");
if (typeof attr !== typeof undefined && attr !== false) {
$("<span>", {
style: item.element.attr("data-style"),
"class": "ui-icon TFOOptlstFiltreImg"
}).appendTo(li);
}
return li.appendTo(ul);
}
});
$("#people")
.TFOiconSelectImg({
create: function (event, ui) {
var widget = $(this).TFOiconSelectImg("widget");
widget.attr("style", $(this).children(":first").data("style")).addClass("TFOOptlstFiltreImg");
},
change: function (event, ui) {
$(this).TFOiconSelectImg("widget").attr("style", ui.item.element.data("style")).addClass("TFOOptlstFiltreImg")
//$("span.ui-selectmenu-text").append($("span", event.currentTarget).clone());
//alert($(this).val());
}
}).TFOiconSelectImg("menuWidget").addClass("ui-menu-icons customicons");
});
</script>
在每个选项中,重要的是要有空图片和文本或
图片和“”
<select name="people" id="people" class="TFOlstFiltreImg TFOfilter lstfilter">
<option value="" data-style="background-image: url('/Images/vide.png');" selected="selected">TOUS</option>
<option value="" data-style="background-image: url('/Images/vide.png');">SANS</option>
<option value="/Images/imgres.jpg" data-style="background-image: url('/Images/imgres.jpg');"> </option>
<option value="/Images/imgres.png" data-style="background-image: url('/Images/imgres.png');"> </option>
</select>
.TFOOptlstFiltreImg
{
background-repeat:no-repeat;
background-size: 24px 24px;
width:100px;
}
.ui-widget
{
font-size: 1em;
}
.ui-selectmenu-menu .ui-menu.customicons .ui-menu-item
{
padding: 0.5em 0 0.5em 2.1em;
background-repeat: no-repeat;
}
/*Agrandir sinin 16px par defaut*/
.ui-selectmenu-menu .ui-menu.customicons .ui-menu-item .ui-icon
{
height: 24px;
width: 24px;
top: 0.1em;
}
此解决方案存在问题,有时 css 您的跨度菜单按钮可以修改。然后更好地使用其他 post 中的方法,并添加一个对象
还有另一个解决方案:
<script type="text/javascript">
$(function () {
$.widget("custom.TFOiconSelectImg", $.ui.selectmenu, {
_renderItem: function (ul, item) {
var li = $("<li>", { html: item.element.html() });
var attr = item.element.attr("data-style");
if (typeof attr !== typeof undefined && attr !== false) {
$("<span>", {
style: item.element.attr("data-style"),
"class": "ui-icon TFOOptlstFiltreImg"
}).appendTo(li);
}
return li.appendTo(ul);
}
});
$("#people")
.TFOiconSelectImg({
create: function (event, ui) {
var widget = $(this).TFOiconSelectImg("widget");
$span = $('<span id="' + this.id + 'ImgSelected" class="TFOSizeImgSelected"> ').html(" ").appendTo(widget);
$span.attr("style", $(this).children(":first").data("style"));
},
change: function (event, ui) {
$("#" + this.id + 'ImgSelected').attr("style", ui.item.element.data("style"));
}
}).TFOiconSelectImg("menuWidget").addClass("ui-menu-icons customicons");
});
</script>
<select name="people" id="people" class="TFOlstFiltreImg">
<option value="" data-style="background-image: url('/Images/vide.png');" selected="selected">TOUS</option>
<option value="" data-style="background-image: url('/Images/vide.png');">SANS</option>
<option value="/Images/imgres.jpg" data-style="background-image: url('/Images/imgres.jpg');"> </option>
<option value="/Images/imgres.png" data-style="background-image: url('/Images/imgres.png');"> </option>
</select>
以及关联的CSS
.ui-widget
{
font-size: 1em;
}
.ui-widget-content
{
border-style: none;
}
/*Affichage des options*/
.ui-selectmenu-menu .ui-menu.customicons .ui-menu-item
{
padding: 0.5em 0 0.5em 2.1em;
background-repeat: no-repeat;
}
/*Agrandir sinon 16px par defaut*/
.ui-selectmenu-menu .ui-menu.customicons .ui-menu-item .ui-icon
{
height: 24px;
width: 24px;
top: 0.1em;
}
.TFOlstFiltreImg
{
width: 100px;
}
.TFOSizeImgSelected
{
position:absolute;
height: 24px;
width: 24px;
left:35%;
right:auto;
margin-top:-12px; /* 24/2*/
top:50%;
background-size:24px 24px;
background-repeat:no-repeat;
}
.TFOOptlstFiltreImg
{
background-size:24px 24px;
background-repeat:no-repeat;
}
这是另一个示例。不加跨度,只加图片
$("#people")
.TFOiconSelectImg({
create: function (event, ui) {
var widget = $(this).TFOiconSelectImg("widget"); var $SpanTxt = widget.children(":last");
$span = $('<img class="TFOSizeImgSelected TFOOptlstFiltreImg"> ').appendTo($SpanTxt);
$span.attr("style", $(this).children(":first").data("style"));
},
change: function (event, ui) {
var widget = $(this).TFOiconSelectImg("widget"); var $SpanTxt = widget.children(":last");
$span = $('<img class="TFOSizeImgSelected TFOOptlstFiltreImg"> ').appendTo($SpanTxt);
$span.attr("style", ui.item.element.data("style"));
//$("#" + this.id + 'ImgSelected').attr("style", ui.item.element.data("style"));
}
}).TFOiconSelectImg("menuWidget").addClass("ui-menu-icons customicons");
将css修改为
.TFOSizeImgSelected
{
position:absolute;
height: 24px;
width: 24px;
left:2em;
}
.TFOOptlstFiltreImg
{
background-size:24px 24px;
background-repeat:no-repeat;
}
使用 JQuery UI selectmenu 示例我想出了以下解决方案:
$(function () {
$.widget("custom.iconselectmenu", $.ui.selectmenu, {
_renderItem: function (ul, item) {
var li = $("<li>"),
wrapper = $("<div>", { html: item.element.html() });
if (item.disabled) {
li.addClass("ui-state-disabled");
}
$("<span>", {
style: item.element.attr("data-style"),
"class": "ui-icon " + item.element.attr("data-class")
})
.appendTo(wrapper);
return li.append(wrapper).appendTo(ul);
}
});
$("#people")
.iconselectmenu({
create: function (event, ui) {
var widget = $(this).iconselectmenu("widget");
$span = $('<span id="' + this.id + 'selected" class="avatar-selected"> ').html(" ").appendTo(widget);
$span.attr("style", $(this).children(":first").data("style"));
},
change: function (event, ui) {
$("#" + this.id + 'selected').attr("style", ui.item.element.data("style"));
}
})
.iconselectmenu("menuWidget")
.addClass("ui-menu-icons avatar");
});
和对应的CSS:
.ui-selectmenu-menu .ui-menu.avatar .ui-menu-item-wrapper {
padding: 2px 10px 0 30px;
}
.ui-selectmenu-menu .ui-menu.avatar .ui-menu-item .ui-icon {
height: 24px;
width: 24px;
top: 0.1em;
}
.ui-selectmenu-text {
padding-left: 2em;
}
.avatar-selected {
position:absolute;
height: 24px;
width: 24px;
right:auto;
margin-top:-12px;
top:50%;
background-repeat:no-repeat;
}
我添加了一些更新以在选择项目时保留图标。工作完美。
$(function () {
$.widget("custom.iconselectmenu", $.ui.selectmenu, {
_renderItem: function (ul, item) {
var li = $("<li>"),
wrapper = $("<div>", { text: item.label });
if (item.disabled) {
li.addClass("ui-state-disabled");
}
$("<i>", {
style: item.element.attr("data-style"),
"class": "bl-icon " + item.element.attr("data-class")
})
.appendTo(wrapper);
return li.append(wrapper).appendTo(ul);
}
});
$("#IconDropdown").iconselectmenu({
create: function (event, ui) {
var widget = $(this).iconselectmenu("widget");
$span = $('<i id="' + this.id + 'selected" class="avatar-selected"> ').html(" ").appendTo(widget);
$("#" + this.id + 'selected').attr("class", $("#IconDropdown option:selected")[0].getAttribute('data-class'));
},
change: function (event, ui) {
$("#" + this.id + 'selected').attr("class", ui.item.element[0].getAttribute('data-class'));
}
}).iconselectmenu("menuWidget").addClass("ui-menu-icons");
});
我使用 jquery UI - Select 菜单来构建带图片的列表。 我关注 this link,这很好。 但是当你 select 一个项目时,复制的只是文本,而不是图片。 我解释为什么我想要图片。我有一个没有文字的列表,只有图片,然后当你选择一个项目时,你会看到一个空的跨度...... 有人有想法吗?
这是我的代码
<script type="text/javascript">
$(function () {
$.widget("custom.iconselectmenu", $.ui.selectmenu, {
_renderItem: function (ul, item) {
var li = $("<li>", { html: item.element.html() });
var attr = item.element.attr("data-style");
if (typeof attr !== typeof undefined && attr !== false) {
$("<span>", {
style: item.element.attr("data-style"),
"class": "ui-icon TFOOptlstFiltreImg"
}).appendTo(li);
}
return li.appendTo(ul);
}
});
$("#people")
.iconselectmenu().iconselectmenu("menuWidget").addClass("ui-menu-icons");
});
</script>
<style type="text/css">
select
{
width: 200px;
}
</style>
<select name="people" id="people">
<option value="1" data-style="background-image: url('http://www.gravatar.com/avatar/b3e04a46e85ad3e165d66f5d927eb609?d=monsterid&r=g&s=16');">John Resig</option>
<option value="2" data-style="background-image: url('http://www.gravatar.com/avatar/e42b1e5c7cfd2be0933e696e292a4d5f?d=monsterid&r=g&s=16');">Tauren Mills</option>
<option value="3" data-style="background-image: url('http://www.gravatar.com/avatar/bdeaec11dd663f26fa58ced0eb7facc8?d=monsterid&r=g&s=16');">Jane Doe</option>
</select>
这个解决方案运行 ok 在这里,我在项目中只有文本或只有图片。永远不会同时出现。
<script type="text/javascript">
$(function () {
$.widget("custom.TFOiconSelectImg", $.ui.selectmenu, {
_renderItem: function (ul, item) {
var li = $("<li>", { html: item.element.html() });
var attr = item.element.attr("data-style");
if (typeof attr !== typeof undefined && attr !== false) {
$("<span>", {
style: item.element.attr("data-style"),
"class": "ui-icon TFOOptlstFiltreImg"
}).appendTo(li);
}
return li.appendTo(ul);
}
});
$("#people")
.TFOiconSelectImg({
create: function (event, ui) {
var widget = $(this).TFOiconSelectImg("widget");
widget.attr("style", $(this).children(":first").data("style")).addClass("TFOOptlstFiltreImg");
},
change: function (event, ui) {
$(this).TFOiconSelectImg("widget").attr("style", ui.item.element.data("style")).addClass("TFOOptlstFiltreImg")
//$("span.ui-selectmenu-text").append($("span", event.currentTarget).clone());
//alert($(this).val());
}
}).TFOiconSelectImg("menuWidget").addClass("ui-menu-icons customicons");
});
</script>
在每个选项中,重要的是要有空图片和文本或 图片和“”
<select name="people" id="people" class="TFOlstFiltreImg TFOfilter lstfilter">
<option value="" data-style="background-image: url('/Images/vide.png');" selected="selected">TOUS</option>
<option value="" data-style="background-image: url('/Images/vide.png');">SANS</option>
<option value="/Images/imgres.jpg" data-style="background-image: url('/Images/imgres.jpg');"> </option>
<option value="/Images/imgres.png" data-style="background-image: url('/Images/imgres.png');"> </option>
</select>
.TFOOptlstFiltreImg
{
background-repeat:no-repeat;
background-size: 24px 24px;
width:100px;
}
.ui-widget
{
font-size: 1em;
}
.ui-selectmenu-menu .ui-menu.customicons .ui-menu-item
{
padding: 0.5em 0 0.5em 2.1em;
background-repeat: no-repeat;
}
/*Agrandir sinin 16px par defaut*/
.ui-selectmenu-menu .ui-menu.customicons .ui-menu-item .ui-icon
{
height: 24px;
width: 24px;
top: 0.1em;
}
此解决方案存在问题,有时 css 您的跨度菜单按钮可以修改。然后更好地使用其他 post 中的方法,并添加一个对象
还有另一个解决方案:
<script type="text/javascript">
$(function () {
$.widget("custom.TFOiconSelectImg", $.ui.selectmenu, {
_renderItem: function (ul, item) {
var li = $("<li>", { html: item.element.html() });
var attr = item.element.attr("data-style");
if (typeof attr !== typeof undefined && attr !== false) {
$("<span>", {
style: item.element.attr("data-style"),
"class": "ui-icon TFOOptlstFiltreImg"
}).appendTo(li);
}
return li.appendTo(ul);
}
});
$("#people")
.TFOiconSelectImg({
create: function (event, ui) {
var widget = $(this).TFOiconSelectImg("widget");
$span = $('<span id="' + this.id + 'ImgSelected" class="TFOSizeImgSelected"> ').html(" ").appendTo(widget);
$span.attr("style", $(this).children(":first").data("style"));
},
change: function (event, ui) {
$("#" + this.id + 'ImgSelected').attr("style", ui.item.element.data("style"));
}
}).TFOiconSelectImg("menuWidget").addClass("ui-menu-icons customicons");
});
</script>
<select name="people" id="people" class="TFOlstFiltreImg">
<option value="" data-style="background-image: url('/Images/vide.png');" selected="selected">TOUS</option>
<option value="" data-style="background-image: url('/Images/vide.png');">SANS</option>
<option value="/Images/imgres.jpg" data-style="background-image: url('/Images/imgres.jpg');"> </option>
<option value="/Images/imgres.png" data-style="background-image: url('/Images/imgres.png');"> </option>
</select>
以及关联的CSS
.ui-widget
{
font-size: 1em;
}
.ui-widget-content
{
border-style: none;
}
/*Affichage des options*/
.ui-selectmenu-menu .ui-menu.customicons .ui-menu-item
{
padding: 0.5em 0 0.5em 2.1em;
background-repeat: no-repeat;
}
/*Agrandir sinon 16px par defaut*/
.ui-selectmenu-menu .ui-menu.customicons .ui-menu-item .ui-icon
{
height: 24px;
width: 24px;
top: 0.1em;
}
.TFOlstFiltreImg
{
width: 100px;
}
.TFOSizeImgSelected
{
position:absolute;
height: 24px;
width: 24px;
left:35%;
right:auto;
margin-top:-12px; /* 24/2*/
top:50%;
background-size:24px 24px;
background-repeat:no-repeat;
}
.TFOOptlstFiltreImg
{
background-size:24px 24px;
background-repeat:no-repeat;
}
这是另一个示例。不加跨度,只加图片
$("#people")
.TFOiconSelectImg({
create: function (event, ui) {
var widget = $(this).TFOiconSelectImg("widget"); var $SpanTxt = widget.children(":last");
$span = $('<img class="TFOSizeImgSelected TFOOptlstFiltreImg"> ').appendTo($SpanTxt);
$span.attr("style", $(this).children(":first").data("style"));
},
change: function (event, ui) {
var widget = $(this).TFOiconSelectImg("widget"); var $SpanTxt = widget.children(":last");
$span = $('<img class="TFOSizeImgSelected TFOOptlstFiltreImg"> ').appendTo($SpanTxt);
$span.attr("style", ui.item.element.data("style"));
//$("#" + this.id + 'ImgSelected').attr("style", ui.item.element.data("style"));
}
}).TFOiconSelectImg("menuWidget").addClass("ui-menu-icons customicons");
将css修改为
.TFOSizeImgSelected
{
position:absolute;
height: 24px;
width: 24px;
left:2em;
}
.TFOOptlstFiltreImg
{
background-size:24px 24px;
background-repeat:no-repeat;
}
使用 JQuery UI selectmenu 示例我想出了以下解决方案:
$(function () {
$.widget("custom.iconselectmenu", $.ui.selectmenu, {
_renderItem: function (ul, item) {
var li = $("<li>"),
wrapper = $("<div>", { html: item.element.html() });
if (item.disabled) {
li.addClass("ui-state-disabled");
}
$("<span>", {
style: item.element.attr("data-style"),
"class": "ui-icon " + item.element.attr("data-class")
})
.appendTo(wrapper);
return li.append(wrapper).appendTo(ul);
}
});
$("#people")
.iconselectmenu({
create: function (event, ui) {
var widget = $(this).iconselectmenu("widget");
$span = $('<span id="' + this.id + 'selected" class="avatar-selected"> ').html(" ").appendTo(widget);
$span.attr("style", $(this).children(":first").data("style"));
},
change: function (event, ui) {
$("#" + this.id + 'selected').attr("style", ui.item.element.data("style"));
}
})
.iconselectmenu("menuWidget")
.addClass("ui-menu-icons avatar");
});
和对应的CSS:
.ui-selectmenu-menu .ui-menu.avatar .ui-menu-item-wrapper {
padding: 2px 10px 0 30px;
}
.ui-selectmenu-menu .ui-menu.avatar .ui-menu-item .ui-icon {
height: 24px;
width: 24px;
top: 0.1em;
}
.ui-selectmenu-text {
padding-left: 2em;
}
.avatar-selected {
position:absolute;
height: 24px;
width: 24px;
right:auto;
margin-top:-12px;
top:50%;
background-repeat:no-repeat;
}
我添加了一些更新以在选择项目时保留图标。工作完美。
$(function () {
$.widget("custom.iconselectmenu", $.ui.selectmenu, {
_renderItem: function (ul, item) {
var li = $("<li>"),
wrapper = $("<div>", { text: item.label });
if (item.disabled) {
li.addClass("ui-state-disabled");
}
$("<i>", {
style: item.element.attr("data-style"),
"class": "bl-icon " + item.element.attr("data-class")
})
.appendTo(wrapper);
return li.append(wrapper).appendTo(ul);
}
});
$("#IconDropdown").iconselectmenu({
create: function (event, ui) {
var widget = $(this).iconselectmenu("widget");
$span = $('<i id="' + this.id + 'selected" class="avatar-selected"> ').html(" ").appendTo(widget);
$("#" + this.id + 'selected').attr("class", $("#IconDropdown option:selected")[0].getAttribute('data-class'));
},
change: function (event, ui) {
$("#" + this.id + 'selected').attr("class", ui.item.element[0].getAttribute('data-class'));
}
}).iconselectmenu("menuWidget").addClass("ui-menu-icons");
});