Thursday, 11 February 2016

Moving pick-list values up and down (reordering) in javaScript (Works only chrome, not working for Firefox and IE)

<!-- To switch the picklist values -->
    function arraymove(direction) {
        var optionslist = document.getElementById('select-2').options;
        var selLst = [];
        var unselLst = [];
        var combLstVals = [];
        var combLstLabels = [];
        var combLstSel = [];
        var selStartIndex;
        var count = 0;
        for(i=0;i<optionslist.length;i++) {
            if(optionslist[i].selected) {
                if(count == 0)
                    selStartIndex = i;
                count++;
                selLst.push(optionslist[i]);
            }
            else {
                unselLst.push(optionslist[i]);
            }
        }
        var ovelAllLength = selStartIndex + selLst.length;
            var isApply = false;
            //Down Arrow Logic
            if(direction == 'down') {
                if(selStartIndex != null && (ovelAllLength < optionslist.length || selStartIndex == 0)) {
                    isApply = true;
                    if(selStartIndex != 0) {
                        for(i=0;i<unselLst.length;i++) {
                            if(i == selStartIndex) {
                                combLstVals.push(unselLst[i].value);
                                combLstLabels.push(unselLst[i].label);
                                combLstSel.push(false);
                                for(j=0;j<selLst.length;j++) {
                                    combLstVals.push(selLst[j].value);
                                    combLstLabels.push(selLst[j].label);
                                    combLstSel.push(true);        
                                }
                            }
                            else {
                                combLstVals.push(unselLst[i].value);
                                combLstLabels.push(unselLst[i].label);
                                combLstSel.push(false);
                            }
                        }
                    }
                    else {
                        combLstVals.push(unselLst[0].value);
                        combLstLabels.push(unselLst[0].label);
                        combLstSel.push(false);
                        for(j=0;j<selLst.length;j++) {
                            combLstVals.push(selLst[j].value);
                            combLstLabels.push(selLst[j].label);
                            combLstSel.push(true);        
                        }
                        for(i=1;i<unselLst.length;i++) {
                            combLstVals.push(unselLst[i].value);
                            combLstLabels.push(unselLst[i].label);
                            combLstSel.push(false);
                        }
                    }
                }                          
            }
            //Up Arrow Logic
            else if(direction == 'up') {
                if(selStartIndex != 0 && selStartIndex != null) {
                    isApply = true;
                    if(selStartIndex == 1) {
                        for(j=0;j<selLst.length;j++) {
                            combLstVals.push(selLst[j].value);
                            combLstLabels.push(selLst[j].label);
                            combLstSel.push(true);        
                        }
                        for(i=0;i<unselLst.length;i++) {
                            combLstVals.push(unselLst[i].value);
                            combLstLabels.push(unselLst[i].label);
                            combLstSel.push(false);
                        }
                    }
                    else {
                         for(i=0;i<unselLst.length;i++) {
                            if(i == selStartIndex - 1) {
                                for(j=0;j<selLst.length;j++) {
                                    combLstVals.push(selLst[j].value);
                                    combLstLabels.push(selLst[j].label);
                                    combLstSel.push(true);        
                                }
                                combLstVals.push(unselLst[i].value);
                                combLstLabels.push(unselLst[i].label);
                                combLstSel.push(false);                            
                            }
                            else {
                                combLstVals.push(unselLst[i].value);
                                combLstLabels.push(unselLst[i].label);
                                combLstSel.push(false);
                            }
                        }
                    }
                }
            }      
            if(isApply) {
                for(i=0;i<optionslist.length;i++) {
                    optionslist[i].value = combLstVals[i];
                    optionslist[i].label = combLstLabels[i];
                    optionslist[i].selected = combLstSel[i];
                }
            }
    }

No comments:

Post a Comment

Labels