PHP Classes

File: selectbox.js

Recommend this page to a friend!
  Classes of Rafael Rend   Rend Double Select   selectbox.js   Download  
File: selectbox.js
Role: Auxiliary data
Content type: text/plain
Description: Javascript file to manipulate selects
Class: Rend Double Select
Select multiple form values using 2 select inputs
Author: By
Last change:
Date: 12 years ago
Size: 16,931 bytes
 

Contents

Class file image Download
// =================================================================== // Author: Matt Kruse <matt@mattkruse.com> // WWW: http://www.mattkruse.com/ // // NOTICE: You may use this code for any purpose, commercial or // private, without any further permission from the author. You may // remove this notice from your final code if you wish, however it is // appreciated by the author if at least my web site address is kept. // // You may *NOT* re-distribute this code in any way except through its // use. That means, you can include it in your product, or your web // site, or any other form where the code is actually being used. You // may not put the plain javascript up on your site for download or // include it in your javascript libraries for download. // If you wish to share this code with others, please just point them // to the URL instead. // Please DO NOT link directly to my .js files from your site. Copy // the files to your server and use them there. Thank you. // =================================================================== // HISTORY // ------------------------------------------------------------------ // April 20, 2005: Fixed the removeSelectedOptions() function to // correctly handle single selects // June 12, 2003: Modified up and down functions to support more than // one selected option /* DESCRIPTION: These are general functions to deal with and manipulate select boxes. Also see the OptionTransfer library to more easily handle transferring options between two lists COMPATABILITY: These are fairly basic functions - they should work on all browsers that support Javascript. */ // ------------------------------------------------------------------- // hasOptions(obj) // Utility function to determine if a select object has an options array // ------------------------------------------------------------------- function removeOptionSelected(elSel) { var i; for (i = elSel.length - 1; i>=0; i--) { if (elSel.options[i].selected) { elSel.remove(i); } } } function appendOptionLast(elSel, valor, texto) { var elOptNew = document.createElement('option'); elOptNew.text = valor; elOptNew.value = texto; try { elSel.add(elOptNew, null); // standards compliant; doesn't work in IE } catch(ex) { elSel.add(elOptNew); // IE only } } function hasOptions(obj) { if (obj!=null && obj.options!=null) { return true; } return false; } // ------------------------------------------------------------------- // selectUnselectMatchingOptions(select_object,regex,select/unselect,true/false) // This is a general function used by the select functions below, to // avoid code duplication // ------------------------------------------------------------------- function selectUnselectMatchingOptions(obj,regex,which,only) { if (window.RegExp) { if (which == "select") { var selected1=true; var selected2=false; } else if (which == "unselect") { var selected1=false; var selected2=true; } else { return; } var re = new RegExp(regex); if (!hasOptions(obj)) { return; } for (var i=0; i<obj.options.length; i++) { if (re.test(obj.options[i].text)) { obj.options[i].selected = selected1; } else { if (only == true) { obj.options[i].selected = selected2; } } } } } // ------------------------------------------------------------------- // selectMatchingOptions(select_object,regex) // This function selects all options that match the regular expression // passed in. Currently-selected options will not be changed. // ------------------------------------------------------------------- function selectMatchingOptions(obj,regex) { selectUnselectMatchingOptions(obj,regex,"select",false); } // ------------------------------------------------------------------- // selectOnlyMatchingOptions(select_object,regex) // This function selects all options that match the regular expression // passed in. Selected options that don't match will be un-selected. // ------------------------------------------------------------------- function selectOnlyMatchingOptions(obj,regex) { selectUnselectMatchingOptions(obj,regex,"select",true); } // ------------------------------------------------------------------- // unSelectMatchingOptions(select_object,regex) // This function Unselects all options that match the regular expression // passed in. // ------------------------------------------------------------------- function unSelectMatchingOptions(obj,regex) { selectUnselectMatchingOptions(obj,regex,"unselect",false); } // ------------------------------------------------------------------- // sortSelect(select_object) // Pass this function a SELECT object and the options will be sorted // by their text (display) values // ------------------------------------------------------------------- function sortSelect(obj) { var o = new Array(); if (!hasOptions(obj)) { return; } for (var i=0; i<obj.options.length; i++) { o[o.length] = new Option( obj.options[i].text, obj.options[i].value, obj.options[i].defaultSelected, obj.options[i].selected) ; } if (o.length==0) { return; } o = o.sort( function(a,b) { if ((a.text+"") < (b.text+"")) { return -1; } if ((a.text+"") > (b.text+"")) { return 1; } return 0; } ); for (var i=0; i<o.length; i++) { obj.options[i] = new Option(o[i].text, o[i].value, o[i].defaultSelected, o[i].selected); } } function selectToHidden(obj, hd) { if (!hasOptions(obj)) { return; } for (var i=0; i<obj.options.length; i++) { if ( i == 0 ) hd.value = obj.options[i].value; else hd.value += ","+ obj.options[i].value; } } // ------------------------------------------------------------------- // selectAllOptions(select_object) // This function takes a select box and selects all options (in a // multiple select object). This is used when passing values between // two select boxes. Select all options in the right box before // submitting the form so the values will be sent to the server. // ------------------------------------------------------------------- function selectAllOptions(obj) { if (!hasOptions(obj)) { return; } for (var i=0; i<obj.options.length; i++) { obj.options[i].selected = true; } } function temOptGroup(sel, nome) { var optgroups = sel.getElementsByTagName("optgroup"); for(var i = 0; i < optgroups.length; i++) { var optgroup = optgroups[i]; var label = optgroup.label; if ( label == nome) return optgroup; } return null; } // ------------------------------------------------------------------- // moveSelectedOptions(select_object,select_object[,autosort(true/false)[,regex]]) // This function moves options between select boxes. Works best with // multi-select boxes to create the common Windows control effect. // Passes all selected values from the first object to the second // object and re-sorts each box. // If a third argument of 'false' is passed, then the lists are not // sorted after the move. // If a fourth string argument is passed, this will function as a // Regular Expression to match against the TEXT or the options. If // the text of an option matches the pattern, it will NOT be moved. // It will be treated as an unmoveable option. // You can also put this into the <SELECT> object as follows: // onDblClick="moveSelectedOptions(this,this.form.target) // This way, when the user double-clicks on a value in one box, it // will be transferred to the other (in browsers that support the // onDblClick() event handler). // ------------------------------------------------------------------- function moveSelectedOptions(from,to) { // Unselect matching options, if required //alert("to aqui"); if ((from.selectedIndex==-1) && to.selectedIndex==-1) alert('Selecione pelo menos um item!'); var optgroups = from.getElementsByTagName("optgroup"); // loop through the optgroup array if (arguments.length>3) { var regex = arguments[3]; if (regex != "") { unSelectMatchingOptions(from,regex); } } // Move them over if (!hasOptions(from)) { return; } var contagrupo = 1; var tem_group = false; if ( optgroups != null && optgroups.length > 0 ) { contagrupo = optgroups.length; tem_group = true; } for(var z = 0; z < contagrupo; z++) { var options = new Array(); var optgroup = ""; if ( optgroups != null && optgroups[z] != undefined){ optgroup = optgroups[z]; options = optgroup.getElementsByTagName("option"); }else{ options = from.getElementsByTagName("option"); } for (var i=0; i<options.length; i++) { var o = options[i]; //alert( o.selected + " - " + o.text); if (o.selected) { if (!hasOptions(to)) { var index = 0; } else { var index=to.options.length; } //optiondestino = new Option( o.text, o.value, false, false); optiondestino=document.createElement("option"); optiondestino.innerHTML = o.text; optiondestino.value = o.value; if ( tem_group ){ var optdestino = temOptGroup(to, optgroup.label); var naotem = false; // alert( tem_group + " - " + contagrupo+" " + options.length); if ( optdestino == null ) { naotem = true; optdestino = document.createElement('optgroup'); optdestino.label = optgroup.label; } optdestino.appendChild(optiondestino); if ( naotem ) { //sortSelect(to); to.selectedIndex = -1; to.appendChild(optdestino); } }else{ to.selectedIndex = -1; to.appendChild(optiondestino); } //to.options[index] } } } // Delete them from original for (var i=(from.options.length-1); i>=0; i--) { var o = from.options[i]; if (o.selected) { from.options[i] = null; } } // Delete option groups if ( optgroups != null ){ var totopt = optgroups.length; for(var z = totopt - 1; z >= 0; z--) { var optgroup = optgroups[z]; var options = optgroup.getElementsByTagName("option"); if ( options.length == 0 ) { // alert( optgroups ); try{ optgroup.removeNode(true); } catch(exp){ from.removeChild( optgroup ); //chrome } } } } if ((arguments.length<3) || (arguments[2]==true)) { //sortSelect(from); //sortSelect(to); } from.selectedIndex = -1; to.selectedIndex = -1; } // ------------------------------------------------------------------- // copySelectedOptions(select_object,select_object[,autosort(true/false)]) // This function copies options between select boxes instead of // moving items. Duplicates in the target list are not allowed. // ------------------------------------------------------------------- function copySelectedOptions(from,to) { var options = new Object(); if (hasOptions(to)) { for (var i=0; i<to.options.length; i++) { options[to.options[i].value] = to.options[i].text; } } if (!hasOptions(from)) { return; } for (var i=0; i<from.options.length; i++) { var o = from.options[i]; if (o.selected) { if (options[o.value] == null || options[o.value] == "undefined" || options[o.value]!=o.text) { if (!hasOptions(to)) { var index = 0; } else { var index=to.options.length; } to.options[index] = new Option( o.text, o.value, false, false); } } } if ((arguments.length<3) || (arguments[2]==true)) { sortSelect(to); } from.selectedIndex = -1; to.selectedIndex = -1; } // ------------------------------------------------------------------- // moveAllOptions(select_object,select_object[,autosort(true/false)[,regex]]) // Move all options from one select box to another. // ------------------------------------------------------------------- function moveAllOptions(from,to) { selectAllOptions(from); if (arguments.length==2) { moveSelectedOptions(from,to); } else if (arguments.length==3) { moveSelectedOptions(from,to,arguments[2]); } else if (arguments.length==4) { moveSelectedOptions(from,to,arguments[2],arguments[3]); } } // ------------------------------------------------------------------- // copyAllOptions(select_object,select_object[,autosort(true/false)]) // Copy all options from one select box to another, instead of // removing items. Duplicates in the target list are not allowed. // ------------------------------------------------------------------- function copyAllOptions(from,to) { selectAllOptions(from); if (arguments.length==2) { copySelectedOptions(from,to); } else if (arguments.length==3) { copySelectedOptions(from,to,arguments[2]); } } // ------------------------------------------------------------------- // swapOptions(select_object,option1,option2) // Swap positions of two options in a select list // ------------------------------------------------------------------- function swapOptions(obj,i,j) { var o = obj.options; var i_selected = o[i].selected; var j_selected = o[j].selected; var temp = new Option(o[i].text, o[i].value, o[i].defaultSelected, o[i].selected); var temp2= new Option(o[j].text, o[j].value, o[j].defaultSelected, o[j].selected); o[i] = temp2; o[j] = temp; o[i].selected = j_selected; o[j].selected = i_selected; } // ------------------------------------------------------------------- // moveOptionUp(select_object) // Move selected option in a select list up one // ------------------------------------------------------------------- function moveOptionUp(obj) { if (!hasOptions(obj)) { return; } for (i=0; i<obj.options.length; i++) { if (obj.options[i].selected) { if (i != 0 && !obj.options[i-1].selected) { swapOptions(obj,i,i-1); obj.options[i-1].selected = true; } } } } // ------------------------------------------------------------------- // moveOptionDown(select_object) // Move selected option in a select list down one // ------------------------------------------------------------------- function moveOptionDown(obj) { if (!hasOptions(obj)) { return; } for (i=obj.options.length-1; i>=0; i--) { if (obj.options[i].selected) { if (i != (obj.options.length-1) && ! obj.options[i+1].selected) { swapOptions(obj,i,i+1); obj.options[i+1].selected = true; } } } } // ------------------------------------------------------------------- // removeSelectedOptions(select_object) // Remove all selected options from a list // (Thanks to Gene Ninestein) // ------------------------------------------------------------------- function removeSelectedOptions(from) { if (!hasOptions(from)) { return; } if (from.type=="select-one") { from.options[from.selectedIndex] = null; } else { for (var i=(from.options.length-1); i>=0; i--) { var o=from.options[i]; if (o.selected) { from.options[i] = null; } } } from.selectedIndex = -1; } // ------------------------------------------------------------------- // removeAllOptions(select_object) // Remove all options from a list // ------------------------------------------------------------------- function removeAllOptions(from) { if (!hasOptions(from)) { return; } for (var i=(from.options.length-1); i>=0; i--) { from.options[i] = null; } from.selectedIndex = -1; } // ------------------------------------------------------------------- // addOption(select_object,display_text,value,selected) // Add an option to a list // ------------------------------------------------------------------- function addOption(obj,text,value,selected) { if (obj!=null && obj.options!=null) { obj.options[obj.options.length] = new Option(text, value, false, selected); } } function getValuesFromSelect(cmb ){ var saida = ""; for ( var z = 0; z < cmb.options.length; z++){ if ( saida != "" ) saida +=","; saida += cmb.options[z].value; } return saida; }