Заполните второй DropDownList на основе выбранного значения из другого DropDownList - PullRequest
0 голосов
/ 24 июня 2010

Я пытаюсь связать два раскрывающихся списка в зависимости от значения, выбранного в первом раскрывающемся списке. Я понятия не имею, как это сделать, поэтому, если вы, ребята, можете указать мне правильное направление, это было бы здорово.

Что я хочу сделать, это выбрать значение из первого раскрывающегося списка и в зависимости от его значения отобразить некоторые параметры во втором раскрывающемся списке.

Я пытаюсь сделать это:

1 - когда происходит событие «OnChange» первого выпадающего списка, я вызываю JavaScript, который перенаправляет метод в контроллер (например, index / mainController / firstMethod / selectedValue).

2 - метод в контроллере, использующий хелпер url, извлекает «selectedValue» для поиска в базе данных значения второго выпадающего списка.

3 - тот же метод загружает вид (тот, который имеет ddl)

При этом я теряю выбранное значение первого ddl.

Я думаю, что это неправильный способ сделать это.

Итак, еще раз, мне нужна помощь.

Ответы [ 2 ]

0 голосов
/ 24 июня 2010

Это проще, если вы используете jQuery .

Вот пример.

На главном экране у вас будет что-то вроде этого:

<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
</head>
<body>
<script>
    $('#dropdown1').change(function(e) {
        $('#dropdown2').load('some_controller/some_function/'+this.value);
    });
</script>

<select name="dropdown1" id="dropdown1">
    <option value="1">option 1</option>
    <option value="2">option 2</option>
</select>

<select name="dropdown2" id="dropdown2"></select>
</body>

Вы говорите в скрипте, что всякий раз, когда раскрывающийся список меняет свое значение, вы вызываете (в Ajax) функцию контроллера с идентификатором в своих аргументах. Не забудьте включить файл jQuery.

В контроллере у вас будет это:

<?php
class some_controller extends Controller {

    function some_function($id) {
        $this->load->model('some_model');
        $data['options'] = $this->some_model->get_options($id);
        echo $this->load->view('view_dropdown2', $data, true);
    }
}
?>

Итак, когда вызывается эта функция, вы вызываете функцию модели с идентификатором раскрывающегося списка и повторяете представление с параметрами. Вы должны установить третий аргумент в значение true, чтобы представление возвращалось как переменная и не отображалось.

А на виду:

<?php foreach($options->result() as $option): ?>
    <option value="<?php echo $option->id; ?>"><?php echo $option->title; ?></option>
<?php endforeach; ?>

Вы просто создаете теги параметров, поскольку тег выбора уже был создан в главном представлении.

0 голосов
/ 24 июня 2010

Звучит так, будто ты хочешь AJAX. Я не настолько хорош, как раньше, но общая процедура должна выглядеть примерно так:

Когда пользователь выбирает что-то в первом раскрывающемся списке, он запускает метод javascript. Этот метод получает это значение и использует его для GET-запроса страницы через XMLHttpRequest. XMLHttpRequest имеет обратный вызов, так что когда данные возвращаются, вы можете заполнить второй выпадающий список этими данными.

Вероятно, проще всего (хотя и несколько странно) иметь страницу PHP, которую она вызывает, просто вернуть полный HTML для нового выпадающего списка. Они вам просто нужно сделать что-то вроде document.getElementById('secondDropdown').innerHTML = requestContent;.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...