Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.01.2013, 01:03
Интересующийся
Отправить личное сообщение для VBeregovoy Посмотреть профиль Найти все сообщения от VBeregovoy
 
Регистрация: 24.01.2013
Сообщений: 13

Умный multiselect с переносом слева направо, и наоборот
Ситуация такая. Есть форма с умным хитрым multiselect-ом который позволяет переносить варианты с левого столбца в правый и таким образом передавать дальше обработчику массив выбранных значений.

multiselect.js

function deleteOption(object,index) {
    object.options[index] = null;
}

function addOption(object,text,value) {
    var defaultSelected = true;
    var selected = true;
    var optionName = new Option(text, value, defaultSelected, selected)
    object.options[object.length] = optionName;
}

function copySelected(fromObject,toObject) {
    for (var i=0, l=fromObject.options.length;i<l;i++) {
        if (fromObject.options[i].selected)
            addOption(toObject,fromObject.options[i].text,fromObject.options[i].value);
    }
    for (var i=fromObject.options.length-1;i>-1;i--) {
        if (fromObject.options[i].selected)
            deleteOption(fromObject,i);
    }
}

function copyAll(fromObject,toObject) {
    for (var i=0, l=fromObject.options.length;i<l;i++) {
        addOption(toObject,fromObject.options[i].text,fromObject.options[i].value);
    }
    for (var i=fromObject.options.length-1;i>-1;i--) {
        deleteOption(fromObject,i);
    }
}

function populateHidden(fromObject,toObject) {
    var output = '';
    for (var i=0, l=fromObject.options.length;i<l;i++) {
            output += escape(fromObject.name) + '=' + escape(fromObject.options[i].value) + '&';
    }
    alert(output);
    toObject.value = output;
}



и собсно сама вьюха где есть эта форма. Пишу на CodeIgniter-e

<html>
    <head>
        <title><?php echo $title; ?></title>
        <meta charset="UTF-8">
        <link type="text/css" rel="stylesheet" media="all" href="/css/style.css"/>
    <script src="/js/multiselect.js"></script>
    </head>
    <body>
        <div id="container">
        <div id="header">
        </div>
            <div id="left_sidebar">
                test
            </div>
            <div id="content">
                <?php
                if ($this->session->flashdata('temp_msg')) {
                    echo '<div id="temp_info">' . $this->session->flashdata('temp_msg') . '</div>';
                }
        echo form_open('',array('onSubmit'=>"populateHidden(document.myForm.select2,document.myForm.hidden1)"));
        echo "<table><tr><td>";

        echo "<p>";
        echo form_multiselect('select1', $user_list, '', 'size=10 style="width:200px"')."</p>";

        echo "</td><td>";

        echo "<p>".form_button('', ' > ', 'onClick="if (document.images) copySelected(this.form.select1,this.form.select2)"')."</p>";
    ;
        echo "<p>".form_button('', ' < ', 'onClick="if (document.images) copySelected(this.form.select2,this.form.select1)"')."</p>";

        echo "<p>".form_button('',' >> ', 'onClick="if (document.images) copyAll(this.form.select1,this.form.select2)"')."</p>";
        
        echo "<p>".form_button('',' << ', 'onClick="if (document.images) copyAll(this.form.select2,this.form.select1)"')."</p>";
        
        echo "</td><td>";
        
        echo form_multiselect('select2', array(), '', 'size=10 style="width:200px"');    
        
        echo "</td></tr></table>";
        echo form_submit('', "Send");
        echo form_close();
        ?>
            </div>



Вот суть в том что $_POST['select2'] который попадает в обработчик является не массивом значений которые мне нужны, а лишь строкой в которую занесен лишь первый выбранный option. Соответственно для того чтоб был возвращен массив мне нужно назвать select2 select2[]. Но в этом случа javascript наотрез отказывается переносить по кнопкам с лева направо значения... Вот хотел бы узнать как решить данную прискорбную ситуацию...
Ответить с цитированием
  #2 (permalink)  
Старый 24.01.2013, 02:49
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Я не понял че делает populateHidden.
Чтобы php принял параметр как массив, он должен иметь имя типа myfield[]
Ответить с цитированием
  #3 (permalink)  
Старый 24.01.2013, 13:05
Интересующийся
Отправить личное сообщение для VBeregovoy Посмотреть профиль Найти все сообщения от VBeregovoy
 
Регистрация: 24.01.2013
Сообщений: 13

Сообщение от danik.js Посмотреть сообщение
Я не понял че делает populateHidden.
Чтобы php принял параметр как массив, он должен иметь имя типа myfield[]
Да. Я новичек в JavaScript и решение нашел в интернете. Что делает PopulateHidden я тоже не знаю. Вот в этом и проблема то. Если я называю select2[] то кнопки перестают переносить значения вправо...
Ответить с цитированием
  #4 (permalink)  
Старый 24.01.2013, 18:07
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Ну так надо менять и строки типа this.form.select2 на this.form['select2[]']
Ответить с цитированием
  #5 (permalink)  
Старый 25.01.2013, 03:01
Интересующийся
Отправить личное сообщение для VBeregovoy Посмотреть профиль Найти все сообщения от VBeregovoy
 
Регистрация: 24.01.2013
Сообщений: 13

danik.js, огромное тебе спасибо, все заработало, с пол пинка. Я очень тебе благодарен.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск