Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /*
- Modified http://www.dhtmlgoodies.com/scripts/multiple_select/multiple_select.html
- For a Yahoo Answer's Question http://answers.yahoo.com/question/index?qid=20111003142829AALCskT
- */
- // Defaults;
- $dbString = 'Canada,France,United Kingdom'; // To be pulled from Database
- $toPool = explode(',', $dbString);
- $pool = Array('Canada','Finland','France','Germany','Mexico','Norway','Spain','United Kingdom','United States');
- $message = 'Please Select Desired Countries';
- if($_SERVER['REQUEST_METHOD'] == 'POST'){
- $toPool = (count($_POST['toBox']) > 0)? $_POST['toBox'] : Array();
- $newDbString = implode(',', $toPool); // Store in Database;
- $message = 'Selected Countries: ' . implode(', ', $toPool); // Just a way to show selection for you to verify.
- }
- $fromPool = array_diff($pool, $toPool);
- ?>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
- <html>
- <head>
- <title>Multiple select boxes</title>
- <style type="text/css">
- body{
- background-color:#FFF;
- font-family: Trebuchet MS, Lucida Sans Unicode, Arial, sans-serif;
- }
- .multipleSelectBoxControl span{ /* Labels above select boxes*/
- font-family:arial;
- font-size:11px;
- font-weight:bold;
- }
- .multipleSelectBoxControl div option{ /* Select box layout */
- font-family:arial;
- }
- .multipleSelectBoxControl div select{
- height:100%;
- }
- .multipleSelectBoxControl input{ /* Small butons */
- width:25px;
- }
- .multipleSelectBoxControl div{
- float:left;
- }
- fieldset{
- width:500px;
- margin:10px;
- }
- img{
- border:0px;
- }
- </style>
- <script type="text/javascript">
- /************************************************************************************************************
- (C) www.dhtmlgoodies.com, October 2005
- This is a script from www.dhtmlgoodies.com. You will find this and a lot of other scripts at our website.
- Terms of use:
- You are free to use this script as long as the copyright message is kept intact. However, you may not
- redistribute, sell or repost it without our permission.
- Thank you!
- www.dhtmlgoodies.com
- Alf Magne Kalleland
- ************************************************************************************************************/
- var fromBoxArray = new Array();
- var toBoxArray = new Array();
- var selectBoxIndex = 0;
- var arrayOfItemsToSelect = new Array();
- function moveSingleElement()
- {
- var selectBoxIndex = this.parentNode.parentNode.id.replace(/[^\d]/g,'');
- var tmpFromBox;
- var tmpToBox;
- if(this.tagName.toLowerCase()=='select'){
- tmpFromBox = this;
- if(tmpFromBox==fromBoxArray[selectBoxIndex])tmpToBox = toBoxArray[selectBoxIndex]; else tmpToBox = fromBoxArray[selectBoxIndex];
- }else{
- if(this.value.indexOf('>')>=0){
- tmpFromBox = fromBoxArray[selectBoxIndex];
- tmpToBox = toBoxArray[selectBoxIndex];
- }else{
- tmpFromBox = toBoxArray[selectBoxIndex];
- tmpToBox = fromBoxArray[selectBoxIndex];
- }
- }
- for(var no=0;no<tmpFromBox.options.length;no++){
- if(tmpFromBox.options[no].selected){
- tmpFromBox.options[no].selected = false;
- tmpToBox.options[tmpToBox.options.length] = new Option(tmpFromBox.options[no].text,tmpFromBox.options[no].value);
- for(var no2=no;no2<(tmpFromBox.options.length-1);no2++){
- tmpFromBox.options[no2].value = tmpFromBox.options[no2+1].value;
- tmpFromBox.options[no2].text = tmpFromBox.options[no2+1].text;
- tmpFromBox.options[no2].selected = tmpFromBox.options[no2+1].selected;
- }
- no = no -1;
- tmpFromBox.options.length = tmpFromBox.options.length-1;
- }
- }
- var tmpTextArray = new Array();
- for(var no=0;no<tmpFromBox.options.length;no++){
- tmpTextArray.push(tmpFromBox.options[no].text + '___' + tmpFromBox.options[no].value);
- }
- tmpTextArray.sort();
- var tmpTextArray2 = new Array();
- for(var no=0;no<tmpToBox.options.length;no++){
- tmpTextArray2.push(tmpToBox.options[no].text + '___' + tmpToBox.options[no].value);
- }
- tmpTextArray2.sort();
- for(var no=0;no<tmpTextArray.length;no++){
- var items = tmpTextArray[no].split('___');
- tmpFromBox.options[no] = new Option(items[0],items[1]);
- }
- for(var no=0;no<tmpTextArray2.length;no++){
- var items = tmpTextArray2[no].split('___');
- tmpToBox.options[no] = new Option(items[0],items[1]);
- }
- }
- function sortAllElement(boxRef)
- {
- var tmpTextArray2 = new Array();
- for(var no=0;no<boxRef.options.length;no++){
- tmpTextArray2.push(boxRef.options[no].text + '___' + boxRef.options[no].value);
- }
- tmpTextArray2.sort();
- for(var no=0;no<tmpTextArray2.length;no++){
- var items = tmpTextArray2[no].split('___');
- boxRef.options[no] = new Option(items[0],items[1]);
- }
- }
- function moveAllElements()
- {
- var selectBoxIndex = this.parentNode.parentNode.id.replace(/[^\d]/g,'');
- var tmpFromBox;
- var tmpToBox;
- if(this.value.indexOf('>')>=0){
- tmpFromBox = fromBoxArray[selectBoxIndex];
- tmpToBox = toBoxArray[selectBoxIndex];
- }else{
- tmpFromBox = toBoxArray[selectBoxIndex];
- tmpToBox = fromBoxArray[selectBoxIndex];
- }
- for(var no=0;no<tmpFromBox.options.length;no++){
- tmpToBox.options[tmpToBox.options.length] = new Option(tmpFromBox.options[no].text,tmpFromBox.options[no].value);
- }
- tmpFromBox.options.length=0;
- sortAllElement(tmpToBox);
- }
- /* This function highlights options in the "to-boxes". It is needed if the values should be remembered after submit. Call this function onsubmit for your form */
- function multipleSelectOnSubmit()
- {
- for(var no=0;no<arrayOfItemsToSelect.length;no++){
- var obj = arrayOfItemsToSelect[no];
- for(var no2=0;no2<obj.options.length;no2++){
- obj.options[no2].selected = true;
- }
- }
- }
- function createMovableOptions(fromBox,toBox,totalWidth,totalHeight,labelLeft,labelRight)
- {
- fromObj = document.getElementById(fromBox);
- toObj = document.getElementById(toBox);
- arrayOfItemsToSelect[arrayOfItemsToSelect.length] = toObj;
- fromObj.ondblclick = moveSingleElement;
- toObj.ondblclick = moveSingleElement;
- fromBoxArray.push(fromObj);
- toBoxArray.push(toObj);
- var parentEl = fromObj.parentNode;
- var parentDiv = document.createElement('DIV');
- parentDiv.className='multipleSelectBoxControl';
- parentDiv.id = 'selectBoxGroup' + selectBoxIndex;
- parentDiv.style.width = totalWidth + 'px';
- parentDiv.style.height = totalHeight + 'px';
- parentEl.insertBefore(parentDiv,fromObj);
- var subDiv = document.createElement('DIV');
- subDiv.style.width = (Math.floor(totalWidth/2) - 15) + 'px';
- fromObj.style.width = (Math.floor(totalWidth/2) - 15) + 'px';
- var label = document.createElement('SPAN');
- label.innerHTML = labelLeft;
- subDiv.appendChild(label);
- subDiv.appendChild(fromObj);
- subDiv.className = 'multipleSelectBoxDiv';
- parentDiv.appendChild(subDiv);
- var buttonDiv = document.createElement('DIV');
- buttonDiv.style.verticalAlign = 'middle';
- buttonDiv.style.paddingTop = (totalHeight/2) - 50 + 'px';
- buttonDiv.style.width = '30px';
- buttonDiv.style.textAlign = 'center';
- parentDiv.appendChild(buttonDiv);
- var buttonRight = document.createElement('INPUT');
- buttonRight.type='button';
- buttonRight.value = '>';
- buttonDiv.appendChild(buttonRight);
- buttonRight.onclick = moveSingleElement;
- var buttonAllRight = document.createElement('INPUT');
- buttonAllRight.type='button';
- buttonAllRight.value = '>>';
- buttonAllRight.onclick = moveAllElements;
- buttonDiv.appendChild(buttonAllRight);
- var buttonLeft = document.createElement('INPUT');
- buttonLeft.style.marginTop='10px';
- buttonLeft.type='button';
- buttonLeft.value = '<';
- buttonLeft.onclick = moveSingleElement;
- buttonDiv.appendChild(buttonLeft);
- var buttonAllLeft = document.createElement('INPUT');
- buttonAllLeft.type='button';
- buttonAllLeft.value = '<<';
- buttonAllLeft.onclick = moveAllElements;
- buttonDiv.appendChild(buttonAllLeft);
- var subDiv = document.createElement('DIV');
- subDiv.style.width = (Math.floor(totalWidth/2) - 15) + 'px';
- toObj.style.width = (Math.floor(totalWidth/2) - 15) + 'px';
- var label = document.createElement('SPAN');
- label.innerHTML = labelRight;
- subDiv.appendChild(label);
- subDiv.appendChild(toObj);
- parentDiv.appendChild(subDiv);
- toObj.style.height = (totalHeight - label.offsetHeight) + 'px';
- fromObj.style.height = (totalHeight - label.offsetHeight) + 'px';
- selectBoxIndex++;
- }
- </script>
- </head>
- <body>
- <div id="message">
- <?php echo $message; ?>
- </div>
- <fieldset>
- <legend>Multiple select boxes</legend>
- <form method="post" action="" onsubmit="multipleSelectOnSubmit()">
- <select multiple name="fromBox[]" id="fromBox">
- <?php
- foreach($fromPool as $itm){
- echo "\t" . '<option value="' . $itm . '">' . $itm . '</option>' . PHP_EOL;
- }
- ?>
- </select>
- <select multiple name="toBox[]" id="toBox">
- <?php
- foreach($toPool as $itm){
- echo "\t" . '<option value="' . $itm . '">' . $itm . '</option>' . PHP_EOL;
- }
- ?>
- </select>
- <input type="submit" value="OK">
- </form>
- </fieldset>
- <script type="text/javascript">
- createMovableOptions("fromBox","toBox",500,300,'Available countries','Selected countries');
- </script>
- <p>You move elements by clicking on the buttons or by double clicking on select box items</p>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement