2012-12-25 64 views
0

我在jQuery中有一个功能,它在选择框中添加文本框中的内容。当我点击一个按钮的功能被称为:使用jQuery滚动到多选择的最后一个元素

 addToList = function(textField, selectList) 
    { 
      var val = $('#'+textField).val(); 
      var select = $('#'+selectList); 

      //If element does not exist already... 
      if (select.find('option[value="' + val + '"]').length === 0 && val!="") 
      { 
       //Add new element to the list 
       $('<option>', { 
       value: val, 
       text: val 
       }).appendTo(select); 

       //Clear text field 
       $('#'+textField).val(""); 

       //Scroll down multi select and select automatically the added option 
       //TODO: Scrolls only to selected element 
       var lastOption = select.find("option[value="+val+"]"); 
       lastOption.attr("selected", true);    
      } 
      else 
      { 
       if (val!="") 
       { 
        alert("\""+val+"\" is already in the list."); 
       } 
      } 
    }; 

我想,是我每次一个元素添加到列表,列表中向下滚动到它的底部(这意味着该列表的最后一个元素将在其最后一行显示),添加的元素将被自动选中。

我发现SO向下滚动到所选元素一些代码,但我没有发现任何代码,只需滚动无论选中后什么到列表的末尾。我需要这个,因为如果我选择第一个元素,这段代码就不会滚动!

+0

你看着'scrollTop'功能? –

+0

是的。很多!它并没有帮助! – user1881815

+0

如果术语'list'你的意思'select'标签,他们很难与合作是为什么,有提供更多的可交互的网页,以取代他们这么多的插件。在IE中,你不太可能使用'select'实现你想要的东西' – charlietfl

回答

0

试试这个:

var addToList = function(textField, selectList) { 
    var $textField = $('#' + textField), 
     $select = $('#' + selectList), 
     val = $textField.val(), 
     valueFilter = '[value="%s"]'; 
    if(val) { 
     if($select.find('option').filter(valueFilter.replace('%s',val)).length === 0) { 
      $('<option/>').appendTo($select).attr('value', val).text(val); 
      $textField.val(''); 
      $select.val(val);//<<<<<<<<<<<< 
     } 
     else { 
      alert('"' + val + '" is already in the list.'); 
     } 
    } 
}; 
+0

谢谢,但它不起作用。您的代码会取消选择已选择的内容(我不希望发生这种情况),并且不会滚动到列表的末尾。 :( – user1881815

+0

你将不得不通过“取消选择”和“滚动到”来解释你的意思。演示会很好。 –

相关问题