1

以下に、建物用と部屋用の2つのドロップダウンメニューを表示するコードを示します。ユーザーが建物のドロップダウンメニューから建物を選択すると、ajax / jqueryを使用してroom.phpページに移動し、選択した建物に属する部屋を一覧表示し、部屋のドロップダウンメニューに部屋のリストを表示します。これは正常に機能します。

<script type="text/javascript">

    function getRooms() { 
    var building = jQuery("#buildingsDrop").val(); 
    jQuery('#roomsDrop').empty(); 
    jQuery('#roomsDrop').html('<option value="">Please Select</option>'); 
    jQuery.ajax({ 
          type: "post", 
          url:  "room.php", 
          data: { building:building }, 
          success: function(response){ 
              jQuery('#roomsDrop').append(response); 
          } 
        }); 


 }

</script>

...

<?php

 $sql = "SELECT DISTINCT Building FROM Room"; 

 $sqlstmt=$mysqli->prepare($sql);

 $sqlstmt->execute(); 

 $sqlstmt->bind_result($dbBuilding);

 $buildings = array(); // easier if you don't use generic names for data 

 $buildingHTML = "";  
 $buildingHTML .= '<select name="buildings" id="buildingsDrop" onchange="getRooms();">'.PHP_EOL; 
 $buildingHTML .= '<option value="">Please Select</option>'.PHP_EOL;  

 while($sqlstmt->fetch()) 
 { 
     $building = $dbBuilding; 
     $buildingHTML .= "<option value='".$building."'>" . $building . "</option>".PHP_EOL;  
  } 

  $buildingHTML .= '</select>'; 

  $roomHTML = "";  
  $roomHTML .= '<select name="rooms" id="roomsDrop">'.PHP_EOL; 
  $roomHTML .= '<option value="">Please Select</option>'.PHP_EOL;  
  $roomHTML .= '</select>'; 

?>

room.php:

$building = isset($_POST['building']) ? $_POST['building'] : '';

$sql = "SELECT Room FROM Room WHERE Building = ?";
$sqlstmt=$mysqli->prepare($sql);
$sqlstmt->bind_param("s",$building);
$sqlstmt->execute();
$sqlstmt->bind_result($dbRoom);

$roomHTML  = "";

while($sqlstmt->fetch()) {
    $roomHTML .= "<option value='".$dbRoom."'>" . $dbRoom . "</option>".PHP_EOL;
}
echo $roomHTML;

私が抱えている問題は、ユーザーが評価を選択するときに、関連するドロップダウンメニューに評価の建物と部屋のオプションを表示することです。ただし、これらのオプションは選択されておらず、「選択してください」オプションのままです。これはなぜですか。また、表示されているオプションを取得するにはどうすればよいですか。

以下は、ビューのソースコードです。

    //Assessment drop down menu:

    <p><strong>Assessments:</strong> <select name="session" id="sessionsDrop">
    <option value="">Please Select</option>
    <option value='71' style='color: green'>AKXMB - 30-11-2012 - 10:00</option>
    </select> </p>   
    </form>

    //Building drop down menu:

    <select name="buildings" id="buildingsDrop" onchange="getRooms();">
    <option value="">Please Select</option>
    <option value='Canalside East'>Canalside East</option>
    <option value='Canalside West'>Canalside West</option>
    </select>


    //Room drop down menu (list of rooms displayed in room.php):

    <select name="rooms" id="roomsDrop">
    <option value="">Please Select</option>
    </select>

    //Retrieve assessment information 
    //(Below is where problem lies where it is not selecting building and room options in drop down menu)
    <script type="text/javascript">

$(document).ready( function(){

                var sessioninfo = [{"SessionId":71,"Building":"Canalside East","Room":"CE01\/04"},{"SessionId":84,"Building":"Canalside East","Room":"CE01\/04"}];

                $('#sessionsDrop').change( function(){

                    var sessionId = $(this).val();

                    if (sessionId !== '') {
                for (var i = 0, l = sessioninfo.length; i < l; i++)
                {
                        if (sessioninfo[i].SessionId == sessionId) { 

                var currentbuilding = $('#currentBuilding').val(sessioninfo[i].Building);
                var editbuilding = $('#BuildingsDrop').val(sessioninfo[i].Building);
                var currentroom = $('#currentRoom').val(sessioninfo[i].Room);
                var editroom = $('#RoomsDrop').val(sessioninfo[i].Room);
                var currentid = $('#currentId').val(sessioninfo[i].SessionId);
                var editid = $('#newId').val(sessioninfo[i].SessionId);

                        break;
                }
               }
             }

                });
            });
</script>

アップデート:

応用

  • アプリケーションで、ドロップダウンメニューから「モジュール」を選択して送信します。

  • その下にいくつかの機能が表示されます。[評価]ドロップダウンメニューで、任意の評価を選択します。

  • その下にある「現在の評価の詳細」では、読み取り専用のテキスト入力に建物と部屋が表示され、評価の現在の建物と部屋が何であるかが示されます。

  • 「新しい評価の部屋」セクションのドロップダウンメニューで同じ建物と部屋を選択したいのですが。[建物]ドロップダウンメニューで建物が選択されているのがわかりますが、[部屋]ドロップダウンメニューで[部屋]が選択されていません。

4

1 に答える 1

1

これがコピー/貼り付けエラーでない限り<script></script>、評価関数/スクリプトの周りにタグがありません-

<script type="text/javascript">
$(document).ready( function(){

...
    });
</script>

編集

あなたの問題はあなたidのが間違ったケースであるということです-

        ...
        var editbuilding = $('#BuildingsDrop').val(sessioninfo[i].Building);
        ...
        var editroom = $('#RoomsDrop').val(sessioninfo[i].Room);

への変更 -

        ...
        var editbuilding = $('#buildingsDrop').val(sessioninfo[i].Building);
        ...
        var editroom = $('#roomsDrop').val(sessioninfo[i].Room);

も参照してください-DOMではノードIDは大文字と小文字を区別しますか?

編集-2設定する直前に追加
して、選択したものを設定できるようにします。getRooms()var editroom#roomsDrop

var currentbuilding = $('#currentBuilding').val(sessioninfo[i].Building);
var editbuilding = $('#buildingsDrop').val(sessioninfo[i].Building);
var currentroom = $('#currentRoom').val(sessioninfo[i].Room);
getRooms();
var editroom = $('#roomsDrop').val(sessioninfo[i].Room);
var currentid = $('#currentId').val(sessioninfo[i].SessionId);
var editid = $('#newId').val(sessioninfo[i].SessionId);

編集-3

デフォルトで$.ajaxは、ブラウザで非同期に実行されるため、問題は、ブラウザにアクセスする前にすでにに移動しておりsuccess: function(response){}、オプション値を追加していないため、選択するものがないことです。これは2つの方法で修正できます- function getRooms()var editroom = $('#roomsDrop').val(sessioninfo[i].Room);jQuery('#roomsDrop').append(response);roomsDrop

(1)を使用したクイックフィックスasync: false

<script type="text/javascript">
    function getRooms() { 
    var building = jQuery("#buildingsDrop").val(); 
    jQuery('#roomsDrop').empty(); 
    jQuery('#roomsDrop').html('<option value="">Please Select</option>'); 
    jQuery.ajax({ 
          type: "post", 
          url:  "room.php", 
          data: { building:building },
          async: false, 
          success: function(response){ 
              jQuery('#roomsDrop').append(response); 
          } 
        }); 
 }
</script>

これにより、呼び出しが同期的に行われるため、が完了するまで$.ajax続行されません。応答を待つ間、ブラウザがフリーズするため、他のアクションが保留される可能性があることに注意してください。var editroom = $('#roomsDrop').val(sessioninfo[i].Room);success: function(response){}async: false

(2)コールバック関数を使用する-

<script type="text/javascript">
    function getRooms(callback) { 
    var building = jQuery("#buildingsDrop").val(); 
    jQuery('#roomsDrop').empty(); 
    jQuery('#roomsDrop').html('<option value="">Please Select</option>'); 
    jQuery.ajax({ 
          type: "post", 
          url:  "room.php", 
          data: { building:building },
          async: false, 
          success: function(response){ 
              jQuery('#roomsDrop').append(response);
              callback();
          } 
        }); 
 }
</script>    

getRooms(function(){
var editroom = $('#roomsDrop').val(sessioninfo[i].Room);});

このコールバック関数は、終了var editroom = $('#roomsDrop').val(sessioninfo[i].Room);後に実行しますが、ブラウザを押し続けることなくgetRooms()残りの部分を続行しますscript

于 2013-01-01T17:57:27.883 に答える