【发布时间】:2011-08-13 00:53:35
【问题描述】:
我正在制作一个选择菜单插件来替换丑陋的默认选择并在不同的操作系统中保持一致。
这是演示(仅限 firefox 和 webkit)
http://spacirdesigns.com/selectMenu/
它已经在工作了,但是我在将“selected”属性分配给选项时遇到了问题。该代码适用于任何其他属性,但我无法使其适用于所选属性。
这行得通:
select.find('option')
.removeAttr('whatever')
.eq(index).attr('whatever', 'hello');
这不是:
select.find('option')
.removeAttr('selected')
.eq(index).attr('selected', 'selected');
这是目前为止的代码:
(function($){
$.fn.selectMenu = function() {
var select = this;
select.hide();
var title = select.attr('title');
var arrow = 'img/arrow.png';
var items = '';
select
.children('option')
.each(function(){
var item = $(this).text();
if ($(this).val() != '') {
$(this).attr('value', item);
}
items += '<li>' + item + '</li>'
});
var menuHtml =
'<ul class="selectMenu">' +
'<img src="' + arrow + '" alt=""/>' +
'<li>' + title + '</li>' +
'<ul>' + items + '</ul>' +
'</ul>';
select.after(menuHtml);
var menu = $(this).next('ul');
var list = menu.find('ul');
menu
.hover(function(){}, function(){
list.hide();
})
.children('li').hover(function(){
list.show();
});
menu.find('ul li').click(function(){
var index = $(this).index();
menu.children('li').text($(this).text());
select.find('option')
.removeAttr('selected')
.eq(index).attr('selected', 'selected');
list.hide();
});
};
})(jQuery);
【问题讨论】:
-
您是否尝试过使用
.attr('selected', true)? -
.attr('selected', true)也不起作用。 -
我在 FF 4 的测试页面上尝试了这段代码:对我来说很好!属性不是直接在 FireBug 中分配的,但是每次我更改索引属性时都会更改 select 的值和选定选项。
-
是的,我刚刚添加了一个按钮来提醒选定的状态,它可以正常工作,只是在萤火虫中没有显示。那让我发疯了。查看演示spacirdesigns.com/selectMenu
标签: jquery menu option selected