2010-06-23 5 views
0

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

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

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

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

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

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

Выполнение этого я потерял выбранное значение первого DDL.

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

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

ответ

0

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

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

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

0

Это проще, если вы используете 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> 

Вы говорите, в сценарии, что всякий раз, когда выпадающий изменить его значение, вы звоните (Аякс) функцию контроллера с идентификатором в его аргументы. Не забудьте включить файл 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, чтобы представление возвращалось как var и не отображалось.

И в представлении:

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

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