0

ドロップダウン選択フォームに基づいてカレンダーを表示または非表示にするコードを書いています。ドロップダウン選択で onchange アクションとして showHideCalendar() 関数を実行するように設定しました。選択したオプションを変更すると、「オブジェクトが必要です」というエラーが表示されます。関連する HTML と JavaScript コードを含めました。

<script type="text/javascript" language="javascript">

function showHideCalendar(element) {
    document.getElementById("calendar").style.display = "none";        
    if (document.getElementById("dropdown").selectedIndex === 13) {
        cal5.popup();
        document.getElementById("textField").value = "";
        document.getElementById("calendar").style.display = "inline";        
    }
}

</script>

<FORM NAME='Labs' METHOD='POST' ACTION="">
<select id="dropdown" name='TimeFrame0' onchange='showHideCalendar(document.Labs.TimeFrame0)'>
    <option value='NoReorder'>Do Not Reorder</option>
    <option value='2012-06-14 08:40:39.067'>Today</option>
    <option value='2012-06-21 08:40:39.067'>1 Week</option>
    <option value='2012-06-28 08:40:39.067'>2 Weeks</option>
    <option value='2012-07-05 08:40:39.067'>3 Weeks</option>
    <option value='2012-07-12 08:40:39.067'>4 Weeks</option>
    <option value='2012-07-26 08:40:39.067'>6 Weeks</option>
    <option value='2012-07-14 08:40:39.067' selected>1 Month</option>
    <option value='2012-08-14 08:40:39.067'>2 Months</option>
    <option value='2012-09-14 08:40:39.067'>3 Months</option>
    <option value='2012-10-14 08:40:39.067'>4 Months</option>
    <option value='2012-12-14 08:40:39.067'>6 Months</option>
    <option value='2013-03-14 08:40:39.067'>9 Months</option>
    <option value='custom' id='custom'>Calendar Select</option>
</select>                    

<div id='calendar' style='display:inline'>
    <input type=text name='StartDate' value='' size=20 onchange='inputChanged()' onkeydown='inputChanged()' onblur='inputChanged()' id='textField'>
    <a href='javascript:cal5.popup();' onmousedown='inputChanged()'> <img src='/jscalendar/img/cal.gif' width='16' height='16' border='0' alt='Click Here to Pick up the date'></a>
</div>
<input type=checkbox name=SameDate value='on' checked onClick='SetTimeFrame(document.Labs.TimeFrame0)'> Use Same Date For All Labs
<input class='btnsave' type=button name=Save value='Reorder Labs' onClick=javascript:document.Labs.action='/LabReview/Reorder.php?PROV=PROVID&MaxCount=2&Text=1';document.Labs.submit();>
<input class='btncancel' type=button name=Cancel value=Cancel onClick=javascript:top.window.close()>      
</FORM>

これが機能しない理由は誰にもわかりますか。エラーは行でスローされます<select id="dropdown" name='TimeFrame0' onchange='showHideCalendar(document.Labs.TimeFrame0)'>

回答者の 1 人は、エラーは新しいコードにあるのではなく、ページ上の何かにあると考えています。質問を編集して、ページにある残りの JavaScript を追加しています。

<script type="text/javascript" language="javascript">


    function showHideCalendar(element) {
        document.getElementById("calendar").style.display = "none";        
        if (document.getElementById("dropdown").selectedIndex === 13) {
            cal5.popup();
            document.getElementById("textField").value = "";
            document.getElementById("calendar").style.display = "inline";        
        }
    }

    function inputChanged() {
        document.getElementById("dropdown").selectedIndex = 13;
    }

   function SetTimeFrame(element)
     {       
       if (document.Labs.SameDate.checked==true)
         {
           var Elements=document.Labs.elements.length;
         for (var i=0; i<Elements; i++)
           {
          if (document.Labs.elements[i].type=='select-one')
              {                      
                   document.Labs.elements[i].options[element.selectedIndex].selected=true;
              }        
         }    
         }
     }

   if (top.window.opener.document.getElementById("Complete<?php echo($_GET['Item']); ?>"))
     {
       if ('<?php echo($Reviewed); ?>' == 'yes')
          {
                window.opener.document.getElementById("Complete<?php echo($_GET['Item']); ?>").style.visibility='visible';       
                 window.opener.document.getElementById("Partial<?php echo($_GET['Item']); ?>").style.visibility='hidden';       
        }
          else if ('<?php echo($Reviewed); ?>' == 'partial')
         {
                   window.opener.document.getElementById("Partial<?php echo($_GET['Item']); ?>").style.visibility='visible';       
                    window.opener.document.getElementById("Complete<?php echo($_GET['Item']); ?>").style.visibility='hidden';       
        }
   }    
     else
     {
              var temp=top.window.opener.location.href;
             top.window.opener.location.href=temp;    
             top.window.opener.top.window.location.reload(); 
     }

function DateCheck(element)
{
  var xx = element.value;
  var re = new RegExp("^[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]$");
  var re2 = new RegExp("^[0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]$");
    var re3 = new RegExp("^[0-9][0-9]/[0-9]/[0-9][0-9][0-9][0-9]$");
    var re4 = new RegExp("^[0-9]/[0-9]/[0-9][0-9][0-9][0-9]$");

    var error = "";
  var maxdays = new Array(0,31,29,31,30,31,30,31,31,30,31,30,31);
  var retval = true;
  if(element.value != "")
  {
    if(xx.search(re) < 0 && xx.search(re2) < 0 && xx.search(re3) < 0 && xx.search(re4) < 0)
    {
    error = "Invalid Date Format " + xx + ". Please enter dates in the format mm/dd/yyyy."
    retval = false;
    element.value = ""
    }
    else
    {
    var list = xx.split("/");
    var month = list[0];
    if(month.charAt(0) == "0")
    month = month.substr(1);
    if( list[0] < 1 || list[0] > 12)
    {
        error = "Invalid Month " + list[0];
        retval = false;
        element.value = ""
    }
    else 
    if(list[1] < 1 || list[1] > maxdays[month])
    {
        error = "Invalid Day " + list[1];
        retval = false;
        element.value = ""
    }
    else 
    if(list[2] < 1900)
    {
        error = "Invalid Year (Must be greater than 1900) " + list[2];
        retval = false;    
        element.value = ""
    }
    }
    if(!retval)
    alert(error);

    return retval;
  }
}



</script>
4

2 に答える 2

0

この問題は、次のコード ブロックが原因であることが判明しました。

    if (top.window.opener.document.getElementById("Complete<?php echo($_GET['Item']); ?>"))      {        
if ('<?php echo($Reviewed); ?>' == 'yes')
           {
                 window.opener.document.getElementById("Complete<?php echo($_GET['Item']); ?>").style.visibility='visible';
                         window.opener.document.getElementById("Partial<?php echo($_GET['Item']); ?>").style.visibility='hidden';
                }
           else if ('<?php echo($Reviewed); ?>' == 'partial')
          {
                    window.opener.document.getElementById("Partial<?php echo($_GET['Item']); ?>").style.visibility='visible';
                            window.opener.document.getElementById("Complete<?php echo($_GET['Item']); ?>").style.visibility='hidden';
                }
    }
          else
      {
               var temp=top.window.opener.location.href;
              top.window.opener.location.href=temp;
                  top.window.opener.top.window.location.reload();
       }

コードからそれを削除すると、魅力的に機能しました。提案や考えを寄せてくれた皆さんに感謝します。

于 2012-06-14T14:55:35.577 に答える
0

変化する:

<select id="dropdown" name='TimeFrame0' onchange='showHideCalendar(document.Labs.TimeFrame0)'>

に:

<select id="dropdown" name='TimeFrame0' onchange='showHideCalendar(this)'>  
于 2012-06-14T13:37:53.070 に答える