0

だから私はこのような2次元配列を持っています:

$types = array(
    'type1' => array('AA', 'AB', 'AC'),
    'type2' => array('BA', 'BB', 'BC')
);

2 つのフォーム選択を作成したい: 1 つはタイプ選択 ('type1'、'type2' など) で、2 つ目は値選択 ('AA'、'AB' など) ですが、値が必要です。最初の選択に応じてオプションを自動的に変更します。

私はPHPを使用しており、値は厳密に配列からのものです(データベースからではありません)。

2 番目のフォーム選択を動的に入力するために必要な AJAX およびその他のコードを手伝ってくれる人はいますか?


何を試したかを示すために、これまでに作成したコードを次に示します。

入力セル:

$settingCell = $this->Widget->input('sigtypes', array('id' => 'type', 'label' => '', 'options' => array_keys($model::$signalTypeOptions)));
$settingCell .= $this->Widget->input('sigtypevalues', array('label' => '', 'options' => $options));

Javascript

$this->Js->get('#type')->event('change',
    $this->Js->request(
            array('controller'=>'utilities','action'=>'updateInput'),
            array('update' => '$("#options")', 'dataExpression' => true, 'data' => '{value: $this.value}')));

ユーティリティコントローラー:

public function updateInput($value = 0)
{
    $signalTypeOptions = $model::$signalTypeOptions;

    $this->set('options', $signalTypeOptions);
}
4

2 に答える 2

0

私の状況でうまくいった解決策は次のとおりです。CakePHP、javascript、JSON、および AJAX を使用しています。

<?php
$ajaxRequest = $this->Js
    ->request(
           array('controller' => 'Features', 'action' => 'edit'), 
           array('method' => 'get', 'success' => 'changeSelection()') );

$this->Js->buffer( $this->Js->get('#typeSelect')->event('change', $ajaxRequest));
?>

<script>
function changeSelection()
{
var value = $('#typeSelect').val(); // get the value selected in the first dropdown
var div = document.getElementById('sigType'); //div id is sigType
div.innerHTML = '';

    if(value >= 1 && value <= 3) // specifics for my situation, not important
    { 
        //get the array from php, convert to JSON and echo it for use in javascript
        var signalTypeOptions = <?php echo json_encode(array_values($signalTypeOptions) ); ?>;
        var selection = document.createElement('select'); // create the second dropdown

        div.appendChild(selection); // add the second dropdown to the division
        var i = 0;
        // loop through the array to fill the dropdown
        for(optionText in signalTypeOptions[value]) 
        {
            var option = document.createElement('option');
            option.innerHTML = optionText;
            option.value = i;
            i++;
            selection.appendChild(option); // add the option to the dropdown
        }
    }
}
</script>
于 2013-04-16T17:39:05.120 に答える