2017-01-02 58 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