2017-01-02 80 views
0

我已經採取了定製的插件,它給人的功能對於OPTGROUP這是在這裏給出了Add scroll position return on select1. Add optgroup capability項目上點擊鼠標移動自舉,duallistbox

定製bootstrap-duallistbox (with optgroup feature)

我已經創建了一個樣本示例顯示一個運行的例子的plunker。選項組工作正常,但問題是,即使通過當我把move-on-select =「false」仍項目正在移動鼠標點擊。

誰能告訴我這是爲什麼表現得就像是

Working Plunker

<select ng-model="modal.selectedItems" 
         ng-options="item.name group by item.app for item in modal.allItems" 
         multiple 
         bs-duallistbox 
         move-on-select=false 
    ></select> 
+0

它是'moveOnSelect'而不是'move-on-select'。 參考鏈接:http://www.virtuosoft.eu/code/bootstrap-duallistbox/ –

+0

@prakashtank謝謝你的回覆,'moveOnSelect:false'在腳本方面會被提及,我已經把它做成false 'jquery.dlbx.js',仍然沒有用。 'move-on-select' is angular directive –

回答

1

老實說,最簡單的解決方案就是改變selectGroup的實現。我認爲應該是這樣的:

function selectGroup(e) { 
    if(e.data.dlb.settings.moveOnSelect) { 
    move(e.data.dlb); 
    } 
    e.preventDefault(); 
} 

您可能會想對unselectGroup進行類似的更改。目前的實現有奇怪的行爲,它移動的東西沒有被選中,因爲它從來沒有正確選擇任何東西。

編輯:

選擇的方式是錯誤的。我沒有作者的意圖的想法,但我懷疑這個實現更接近什麼用戶期望:

function selectGroup(e) { 
    if (e.target.tagName != 'OPTGROUP') return; 
    $(this).find('option').each(function (index, item) { 
    var $item = $(item); 
    if (!$item.data('filtered1')) { 
     if (!$item.prop('selected')) { 
     $item.prop('selected', true); 
     } else { 
     $item.removeAttr('selected'); 
     } 
    } 
    }); 
    if(e.data.dlb.settings.moveOnSelect) { 
    move(e.data.dlb); 
    } 
    e.preventDefault(); 
} 

再次做出類似的改變unselectGroup。在原始代碼中,問題在於當您單擊option時,點擊會冒泡到optgroup,因此if後衛。另外,選擇狀態不應該直接改變。這已經在move函數中處理了。改變move函數稍後會消化的selected屬性更好。通過這種方式,它也清晰地顯示了實際選定的內容。因此,當您單擊optgroup時,它應該切換每個項目屬性上的選定內容。您可能想要修改如何刪除選定的屬性。

+0

我已經完成了你的建議,現在很高興看到鼠標點擊項移動問題已經解決,但現在問題是讓我說我​​從組中選擇一個項目,然後當我點擊按鈕移動,然後整個組正在向右移動。看看這個[Plunker](https://plnkr.co/edit/tdhCTZyvPqmQPZZqj4cQ?p=preview) –

+0

查看更新後的文章解決這個問題。這是我第一次看圖書館,所以我實際上並不知道作者的原意是什麼,但這對我來說似乎是最直觀的。 – ppham27