0

使用$locationCodeigniter 的会话定义变量,它可以是“Austin”、“Houston”...等。每个地点都提供不同的游览。由于$location已经定义了变量,我需要做的就是在下拉框中填充特定位置的可用游览。下拉列表是表单的一部分,它将在特定控制器上进行验证。谁能给我一些 Javascript 示例来填补我的代码中的空白?

   <?php
$location = $this->session->userdata('location');

// javascript goes here to decide which location and what tours to send in an array.
// $options_tour will be the returned array sent to the form_dropdown()

//form ...
$data_tour = 'class="span12"';
$tour = array('style' => 'font-weight:bold;');
echo form_label('Select Tour: ','tour', $tour);
echo form_dropdown('tour', $options_tour, '', $data_tour);
    ?>
 
4

1 回答 1

0

使用 JavaScript 以这种方式填充表单将需要一种迂回的方法。

要么创建一个隐藏字段供 javascript 读取以获取 $location 变量的值,要么创建一个检索它的 ajax 调用。

接下来,您将编写一个 JavaScript 函数,该函数根据位置返回适当的值。就像是:

function get_tours( location ){

    var tours = {};

    switch locations {

        case 'Austin':
         tours = { "City Center": { 
                                   "text": "City Center" 
                                   "value": "city_center"
                                  }
                 };
        break;

        //etc...
    }

    return tours;
}

如果您选择使用 AJAX 方法,则需要在 AJAX 成功返回时调用此游览选项设置函数。

既然您的 JavaScript 变量中有游览,您将需要更新由 PHP 生成的页面中元素的元素。就像是:

function create_tour_options ( tours ){

    var select = document.getElementById('tour');

    for ( tour in tours ){
        tour_option = document.createElement('option');
        tour_option.value = tours['tour']['value'];
        tour_option.text = tours['tour']['text'];
        select.appendChild('tour_option');
    }

    // Probably more efficient to create a new select object 
    // and replace the existing one instead of adding and 
    // removing individual options. 
}

此外,如果您不需要使用 JavaScript,您可以简单地编写一个 php 函数来执行上述操作并返回您的 $options_tour 变量。就像是:

function get_tours( $location='Austin' ){

    $tours = array();

    switch $location {

        case 'Austin':
            $tours = array( "text" => "City Center" 
                            "value" => "city_center"
                          );
        break;

        //etc...
    }

    return $tours;
}

我相信如果可以的话最好使用 PHP,因为选项将在初始页面加载时生成,之后不必插入。

另外我不确定你是否使用 JQuery,所以我尝试使用 vanilla JavaScript 示例代码。

于 2013-03-28T21:21:33.363 回答