2012-07-06 70 views
0

我已经开始编写一个函数来用自定义HTML列表替换选择框。我似乎无法让“:selected”选择器被识别为选定的选项。我已经尝试了几种方法,我的选择框也有选择属性的选项;]

任何帮助,这是非常赞赏。

$('select').each(function(){ 
    var $ulSelect = $('<ul />'); 
    var $options; 
    var $numSelected = 0; 

    $options = $('option', this).map(function(index, element){ 
     var $selectedClass = ''; 
     if ($(element).is(':selected')) { 
      $numSelected++; 
      $selectedClass = ' class="selected"'; 
     } 
     return $('<li data-value="'+ $(element).val() +'"'+ $selectedClass +'>'+ $(element).text() +'<a href="#" class="x-link"></a></li>'); 
    }).appendTo($ulSelect); 

    var $ulSelectWrap = $('<div />') 
     .addClass('ul-select-wrap') 
     .prepend($ulSelect) 
     .prepend('<span class="selected">'+ $('option:eq(0)', this).text() + $activeText +'</span>'); 

    $(this).hide().before($ulSelectWrap); 
}); 

回答

0

我已经检查中的jsfiddle你的代码,并发现与选择,这是,嗯,其实选择的元素没有问题。我遇到的问题是,您不能通过.appendTo数组(它由.map()返回)。所以,我建议用这个代替:

$.each($options, function() { 
    $(this).appendTo($ulSelect); 
}); 

而另一个问题是,我想,是使用$('option:eq(0)', this)代替$('option:selected', this);前者始终将第一个选项显示为活动状态(尽管只有li元素对应于所选元素才具有selected类)。

检查the demo以查看您的代码的更新版本。

+0

我应该说,我试图确定在页面加载时选择了哪些选项。我将添加一个.change()监听器,在解决这个问题后,将.selected类添加到任何单击的LI元素。 现在,它仍然是一个神秘的原因,为什么jQuery没有看到这些选项被选中。我已经没有问题了:过去选择:\ 谢谢 – 2012-07-06 12:48:49

+0

那么,仍然不能得到什么错;也许它会更好,如果你展示更多的代码(JSfiddle或类似的东西)。我在代码中将'.change'改为'.each',并尝试使用'multiple' - 所有工作都很好。 – raina77ow 2012-07-06 12:52:57

+0

有多奇怪......我只是将它添加到JSfiddle来显示一个例子,它在那里工作:/ http://jsfiddle.net/7X4tG 无论如何感谢。我会从这里弄出来的! – 2012-07-06 16:57:45