1

私はこのjavascriptとphp/htmlコードを以下に持っています:

<script>
          var examInput = document.getElementById('newAssessment').value;
          var dateInput = document.getElementById('newDate').value;
          var timeInput = document.getElementById('newTime').value;

         function showConfirm(){

         var confirmMsg=confirm("Are you sure you want to update the following:" + "\n" + "Exam: " + examInput +  "\n" + "Date: " + dateInput + "\n" + "Time: " + timeInput);

         if (confirmMsg==true)
         {
         submitform();   
     }
}

</script>

...。

<?php

$editsession = "<form action=".htmlentities($_SERVER['PHP_SELF'])." method='post' id='updateForm'>

    <p><strong>New Assessment's Date/Start Time:</strong></p>
    <table>
    <tr>
    <th>Assessment:</th>
    <td><input type='text' id='newAssessment' name='Assessmentnew' readonly='readonly' value='' /> </td>
    </tr>
    <tr>
    <th>Date:</th> 
    <td><input type='text' id='newDate' name='Datenew' readonly='readonly' value='' /> </td>
    </tr>
    <tr>
    <th>Start Time:</th> 
    <td><input type='text' id='newTime' name='Timenew' readonly='readonly' value=''/><span class='timepicker_button_trigger'><img src='Images/clock.gif' alt='Choose Time' /></span> </td>
    </tr>
    </table>
    <div id='datetimeAlert'></div>


    </form>
";

echo $editsession;


?>

問題は、確認ボックスに、試験の名前、日付と時刻がすべてphp/htmlのテキストボックスに表示されていないことです。

たとえば、次のように表示されます。

以下を更新してもよろしいですか:試験:DFRER日付:20-02-2013時間:16:00

代わりに、次のように表示されます。

以下を更新してもよろしいですか:試験:未定義日付:未定義時間:未定義

どうしてこれなの?

4

1 に答える 1

0

<script>タグは、マークアップで検出されるとすぐに実行されます。<script>タグは、呼び出しで参照するHTMLの前にあると想定していgetElementById()ます。

変数を設定する3行は関数の外部で発生し、すぐに実行されるため、DOMが読み込まれる前に、それぞれのDOM要素はまだ存在せず、変数はになりundefinedます。それらを関数に移動するだけです。これには、後で関数を呼び出すときに値が最新になるという追加の利点があります。

 function showConfirm(){
   // Load these variables inside the function
   // If placed outside, their DOM nodes are not yet loaded when the script runs
   var examInput = document.getElementById('newAssessment').value;
   var dateInput = document.getElementById('newDate').value;
   var timeInput = document.getElementById('newTime').value;

   var confirmMsg=confirm("Are you sure you want to update the following:" + "\n" + "Exam: " + examInput +  "\n" + "Date: " + dateInput + "\n" + "Time: " + timeInput);

   if (confirmMsg)
   {
     submitform();   
   }
 }
于 2012-11-10T15:30:01.033 に答える