2011-09-06 24 views
1

我想用一系列值替換一個滑塊並選擇一個範圍選項。我跟着jQuery的選擇文章,它提供了一個很好的多選選項Jquery可選範圍選擇(滑塊行爲)

http://jqueryui.com/demos/selectable/#display-grid

因爲我只想範圍選擇,我禁用使用下面的代碼在按住Ctrl鍵。

$("#selectable").bind("mousedown", function (e) { 
      e.metaKey = false; 
      }).selectable(); 

http://forum.jquery.com/topic/disabling-ctrl-click-on-jquery-ui-selectable

這將禁用CTRL-選擇,但我仍然可以將不屬於該範圍內的鼠標並選擇值。

我的清單是按照4x4的矩陣排列的。問題是我可以拖動我的鼠標,並選擇相同列中的值,這些值不會突出顯示相同範圍下相鄰列中的值。除了單行之外還有什麼出路嗎?

+0

你能告訴我們一個演示頁面嗎?因爲,對我而言,描述發生的事情有點模糊。 – WTK

+0

我將嘗試在某個時間放置頁面。總之,我想單擊並拖動可選列表,如範圍選擇器。現有的功能工作正常,如果你有一個單行但有多行(矩陣)存在問題 –

回答

0

寫了一個函數,該函數創建一個可從namevalue集合中選擇的函數。我是Jquery和Javascript的新手,所以有一些微調的空間。

function NameValue(name, value) { 
     this.name = name; 
     this.value = value; 
    } 

    function createRangeSelectable(elementName, nameValueCollection, functionReference) { 
      var newElementId = "selectable" + elementName; 
     var orderedListHTML = "<ol id='" + newElementId + "' class='selectable'>"; 
     var itemHTML = ""; 

     for (x in nameValueCollection) { 
      var item = nameValueCollection[x]; 
      itemHTML = itemHTML + "<li class='ui-state-default'>" + item.name + "<input type='hidden' value='" + item.value + "'/></li>"; 
     } 

     orderedListHTML = orderedListHTML + itemHTML + "</ol>" 

     $("#" + elementName).html(orderedListHTML); 


     $("#" + newElementId).bind("mousedown", function (e) { 
      e.metaKey = false; 
     }).selectable({ 

      stop: function() { 
       var first = -1; 
       var last = -1; 

       $(".ui-selected", this).each(function() { 

        var index = $("li", this.parentElement).index(this); 
        if (first == -1) 
         first = index 
        last = index 
       }); 

       var firstListItemValue; 
       var lastListItemValue; 

       $("li", this).each(function() { 


        var index = $("li", this.parentElement).index(this); 
        if (index == first) { 
         firstListItemValue = $(this).children('input').val(); 
        } 
        if (index == last) 
         lastListItemValue = $(this).children('input').val(); 

        if (index > first && index < last) 
         if (!$(this).hasClass("ui-selected")) 
          $(this).addClass("ui-selected"); 
       }); 

       functionReference(firstListItemValue, lastListItemValue); 
      } 

     }); 

//Usage 

createRangeSelectable("YourDivId", NameValueArray, function(startValue, endValue){ 

     }); 
0

如果您有多個行,並希望每個單獨的行都是拖動選擇的主題,則只需在每行上設置.selectable()即可。我把這個解決方案演示:http://jsfiddle.net/Nm69t/(或單獨的頁面視圖:http://jsfiddle.net/Nm69t/show

你可以看到,我已經創建了三個列表(工作作爲三個獨立的行)並取得各行的選擇做$('.selectable').selectable();

希望它有幫助。

+0

不適用於我。它應該是單個範圍列表。我可以選擇從1行到n行的範圍。 –

+0

所以我不明白,真的。你有一個4x4矩陣。你想擺脫功能,你可以拖動選擇多個項目?或者,您是否希望能夠拖動選擇,例如,第三列,並且希望從左側到該列的所有項目都被選中? – WTK

+0

我想要以後。單擊一個元素並一直拖動以選擇整個範圍。所以我點擊單元格(1R,1C)並垂直拖動到單元格(2R,1C),它應該選擇全部範圍(1R,2C)(1R,3C),(1R,4C) –