当Eric Hynds的JQuery Multiselect UI选择框动态更新时,会自动选择第一个选项

时间:2012-09-27 11:03:40

标签: javascript jquery jquery-ui server-sent-events

我使用http://www.erichynds.com/jquery/jquery-ui-multiselect-widget/的JQuery UI多选插件动态地将元素附加到选择框

//Make filter cars multiselect
$("#cars_filter").multiselect({noneSelectedText:'Select cars'});

function populateCarfilter(){
    var opts="<option value=''>Select cars</option>";
    $.each(markers, function(idx, mar){
      if(mar.getVisible() && mar.get("car"))
     opts+="<option value='" + mar.get("id") + "'>" + mar.get("driver") + " - " + mar.get("car") + "</option>";
    });

    if($("#cars_filter").html()!=opts){
      var id = $("#cars_filter").val()
      $("#cars_filter").html(opts);
      $("#cars_filter").val(id);
      $("#cars_filter").multiselect('refresh');
    }    
}

populateCarfilter(); //This gets called every 2 secs automatically by SSE (server sent events)

现在,我面临一个奇怪的问题。每次更新选择框时,都会自动选择选择框中的第一个选项。有什么方法可以解决这个问题吗?

谢谢

2 个答案:

答案 0 :(得分:18)

浏览器会自动选择第一个选项,除非您将多个属性添加到元素中。

在jQuery MultiSelect UI Widget javascript源文件中查看,他们已经实现了以下

// browsers automatically select the first option
// by default with single selects
if( isSelected && !o.multiple ){
    labelClasses.push( 'ui-state-active' );
   }

答案 1 :(得分:1)

你总是可以通过循环遍历元素并将值设置为未选择来确保它的工作原理如下:

  click: function(event, ui){

 if(!ui.checked) 
 {   $.each( $('#select2 option'),function(i2, element2)
       {
                if( $(element2).val() === ui.value )
                {
                   if( $(element2).is(':selected') ) { 
             $(element2).attr('selected',false); 
                }
                     $(element2).remove().appendTo('#select1');
                    }        
        });
 }

}

这只是在你动态更新的情况下,并希望确保这样......在我的情况下,我正在将元素从一个下拉列表更新/传递到另一个下拉列表,并且两者都具有multiple ='multiple'属性,所以我需要确保当点击其中一个被删除,然后将其附加到底层选择但仍然第一个选项总是被选中..希望它可以帮助某人在路上...这是一个不错的插件