0

最近、perl アプリケーションを cakephp 2.3 に変換しました。そして今、JavaScriptを使用して計算を実行するページで立ち往生しています。JavaScriptを取り出して別のファイルに入れましたが、ビューで直接試してみました。

各テーブルの最初の列のフィールド (milkconc と matdose) はユーザーが入力します。ユーザーがクリックすると、計算が実行され、2 列目のフィールドに表示されます。計算をクリックすると、5 番目のフィールドに結果が表示されます。ここに画像の説明を入力

最初の列フィールドからタブで移動すると、JavaScript コンソールに次のように表示されます。Cakephpのフォーム入力に合わせて変更する必要があるJavaScriptに何かがあると確信しています。私は何を知りません。私のdefault.ctpにはecho $this->Html->script('tid');、すべての機能を持つファイルがあります。

私が考えたのは、JavaScriptが適切なフィールドに値を入力し、保存がクリックされると、cakephpがそこに入力されたJavaScriptの値を取得してデータベースに入れることです。

ビューの編集:

<?php
    echo $this->Html->css('style');
    echo $this->Html->script('tabs');
    echo $this->Html->script('tid');
?>
<?php echo $this->Form->create('Drug'); ?>
<i><b>These fields are currently under construction.</b></i>
  <table width="100%" border="0" cellspacing="2" cellpadding="2">
    <tr>
      <td><b>Adult Dose: </b></td>
    </tr>
    <tr>
      <td>
      <?php
        echo $this->Form->input('adultdose', array(
              'type' => 'text',
              'name' => 'adultdose',
              'size' => '24',
              'maxlength' => '250',
              'label'=> false, 
              //'class'=>'entryField'
        ));
      ?> </td>
    </tr>
    <tr>
      <td><b>RID Calculations:
      <script type="text/javascript">
         //Previously tried the javascript here.
    </script>
  </b></td>
    </tr>
    <tr>
      <td>
        <table>
          <tr>
            <td>
              <table class="border">
                <tr>
                  <td class="title">&nbsp;</td>
                  <td class="title" align="center" nowrap><b>Dose</b></td>
                  <td class="title" align="center" nowrap><b>mg/kg/day</b></td>
                  <td class="title">&nbsp;</td>
                  <td class="title" align="center" nowrap><b>RID</b></td>
                  <td class="title">&nbsp;</td>
                </tr>
                <tr>
                  <td nowrap>Milk Dose (ug/L)</td>
                  <td align="center">
                    <?php echo $this->Form->input('milkconc', array(
                                    'type' => 'text',
                                    'name' => 'milkconc',
                                    'label' => false,
                                    'size' => '7',
                                    'maxlength' => '125',
                                    'onblur' => 'milk_amount_calc(9);'
                            ));
                    ?>
                  </td>
                  <td align="center">
                    <?php echo $this->Form->input('theor_infa', array(
                                    'type' => 'text',
                                    'name' => 'theor_infa',
                                    'label' => false,
                                    'size' => '7',
                                    'maxlength' => '125',
                                    //'onblur' => 'milk_amount_calc(\'9\');'
                            ));
                    ?>
                  </td>
                  <td nowrap>mg/kg/day</td>
                  <td align="center">
                    <?php echo $this->Form->input('rid', array(
                                    'type' => 'text',
                                    'name' => 'rid',
                                    'label' => false,
                                    'size' => '7',
                                    'maxlength' => '250',
                                    //'onblur' => 'milk_amount_calc(\'9\');'
                            ));
                    ?>
                  </td>
                  <td><button name="buttonName" value="" type="button" onclick="calculate_rid('9');">Calculate</button></td>
                </tr>
                <tr>
                  <td>Mother's Dose (mg)</td>
                  <td align="center">
                    <?php echo $this->Form->input('matdose', array(
                                    'type' => 'text',
                                    'name' => 'matdose',
                                    'label' => false,
                                    'size' => '7',
                                    'maxlength' => '250',
                                    //'onblur' => 'mom_amount_calc(\'9\');'
                            ));
                    ?>
                  </td>
                  <td align="center">
                    <?php echo $this->Form->input('mdkg', array(
                                    'type' => 'text',
                                    'name' => 'mdkg',
                                    'label' => false,
                                    'size' => '7',
                                    'maxlength' => '250',
                                    //'onblur' => 'milk_amount_calc(\'9\');'
                            ));
                    ?>
                  </td>
                  <td>mg/kg/day</td>
                  <td>Reference...</td>
                  <td><!-- --></td>
                </tr>
              </table>
            </td>
/* Code removed to save size. Basically the code above times 5 and each next field is fieldname1,2,3, etc */
              </tr>
              </table>
            </td>
          </tr>
        </table>
      </td>
    </tr>
  </table>
  <td class="actionTable"><?php echo $this->Form->submit('Save/Update & Previous', array('name'=>'Previous')); ?></td>
  <td class="actionTable"><?php echo $this->Form->submit('Save',array('style'=>'width:150px;')); ?></td>
  <td class="actionTable"><?php echo $this->Form->submit('Save/Update & Next', array('name'=>'Next')); ?>
  <?php echo $this->Form->end(); ?>

Javascript:

      function milk_amount_calc(set) {
        if (set == 1) {
          var tmp = (document.form.milkconc1.value / 1000) *.15;
          var val = roundNumber(tmp, 4);
          document.form.theor_infa1.value = val;
        }
        else if (set == 2) {
          var tmp = (document.form.milkconc2.value / 1000) *.15;
          var val = roundNumber(tmp, 4);
          document.form.theor_infa2.value = val;
        }
        else if (set == 3) {
          var tmp = (document.form.milkconc3.value / 1000) *.15;
          var val = roundNumber(tmp, 4);
          document.form.theor_infa3.value = val;
        }
        else if (set == 4) {
          var tmp = (document.form.milkconc4.value / 1000) *.15;
          var val = roundNumber(tmp, 4);
          document.form.theor_infa4.value = val;
        }
        else if (set == 5) {
          var tmp = (document.form.milkconc5.value / 1000) *.15;
          var val = roundNumber(tmp, 4);
          document.form.theor_infa5.value = val;
        }
        else if (set == 9) {
          var tmp = (document.form.milkconc.value / 1000) *.15;
          var val = roundNumber(tmp, 4);
          document.form.theor_infa.value = val;
        }
      }

      function mom_amount_calc(set) {
        if (set == 1) {
          var tmp = document.form.matdose1.value /70;
          var val = roundNumber(tmp, 4);
          document.form.mdkg1.value = val;
        }
        else if (set == 2) {
          var tmp = document.form.matdose2.value /70;
          var val = roundNumber(tmp, 4);
          document.form.mdkg2.value = val;
        }
        else if (set == 3) {
          var tmp = document.form.matdose3.value /70;
          var val = roundNumber(tmp, 4);
          document.form.mdkg3.value = val;
        }
        else if (set == 4) {
          var tmp = document.form.matdose4.value /70;
          var val = roundNumber(tmp, 4);
          document.form.mdkg4.value = val;
        }
        else if (set == 5) {
          var tmp = document.form.matdose5.value /70;
          var val = roundNumber(tmp, 4);
          document.form.mdkg5.value = val;
        }
        else if (set == 9) {
          var tmp = document.form.matdose.value /70;
          var val = roundNumber(tmp, 4);
          document.form.mdkg.value = val;
        }
      }

      var set_0 = 0;
      var set_1 = 0;
      var set_2 = 0;
      var set_3 = 0;
      var set_4 = 0;
      var set_5 = 0;

      var low = 0;
      var high = 0;

      function calculate_rid(set) {
        if (set == 1) {
          if (document.form.theor_infa1.value == 0 || document.form.mdkg1.value == 0) {
            alert("Milk Dose and Mother's Dose are Required\nCan't Calculate the Relative Infant Dose(RID)");
            return;
          }
          set_1 = (document.form.theor_infa1.value / document.form.mdkg1.value) * 100;
          set_1 = roundNumber(set_1, 4);
          var val = set_1 + '%';
          document.form.rid1.value = val;
        }
        else if (set == 2) {
          if (document.form.theor_infa2.value == 0 || document.form.mdkg2.value == 0) {
            alert("Milk Dose and Mother's Dose are Required\nCan't Calculate the Relative Infant Dose(RID)");
            return;
          }
          set_2 = (document.form.theor_infa2.value / document.form.mdkg2.value) * 100;
          set_2 = roundNumber(set_2, 4);
          var val = set_2 + '%';
          document.form.rid2.value = val;
        }
        else if (set == 3) {
          if (document.form.theor_infa3.value == 0 || document.form.mdkg3.value == 0) {
            alert("Milk Dose and Mother's Dose are Required\nCan't Calculate the Relative Infant Dose(RID)");
            return;
          }
          set_3 = (document.form.theor_infa3.value / document.form.mdkg3.value) * 100;
          set_3 = roundNumber(set_3, 4);
          var val = set_3 + '%';
          document.form.rid3.value = val;
        }
        else if (set == 4) {
          if (document.form.theor_infa4.value == 0 || document.form.mdkg4.value == 0) {
            alert("Milk Dose and Mother's Dose are Required\nCan't Calculate the Relative Infant Dose(RID)");
            return;
          }
          set_4 = (document.form.theor_infa4.value / document.form.mdkg4.value) * 100;
          set_4 = roundNumber(set_4, 4);
          var val = set_4 + '%';
          document.form.rid4.value = val;
        }
        else if (set == 5) {
          if (document.form.theor_infa5.value == 0 || document.form.mdkg5.value == 0) {
            alert("Milk Dose and Mother's Dose are Required\nCan't Calculate the Relative Infant Dose(RID)");
            return;
          }
          set_5 = (document.form.theor_infa5.value / document.form.mdkg5.value) * 100;
          set_5 = roundNumber(set_5, 4);
          var val = set_5 + '%';
          document.form.rid5.value = val;
        }
        else if (set == 9) {
          if (document.form.theor_infa.value == 0 || document.form.mdkg.value == 0) {
            alert("Milk Dose and Mother's Dose are Required\nCan't Calculate the Relative Infant Dose(RID)");
            return;
          }
          set_0 = (document.form.theor_infa.value / document.form.mdkg.value) * 100;
          set_0 = roundNumber(set_0, 4);
          var val = set_0 + '%';
          document.form.rid.value = val;
        } 
        set_rid_range();
      }

      function set_rid_range() {
        var arr = new Array();
        var rng = new Array();

        arr[0] = replacer(document.form.rid.value); 
        arr[1] = replacer(document.form.rid1.value); 
        arr[2] = replacer(document.form.rid2.value); 
        arr[3] = replacer(document.form.rid3.value); 
        arr[4] = replacer(document.form.rid4.value); 
        arr[5] = replacer(document.form.rid5.value); 

        arr = arr.sort(sortNumber);

        var this_total = 0;
        for(a = 0; a < arr.length; a++) {
          this_total = this_total + parseFloat(arr[a]); 
          if (arr[a] > 0) {
            rng.push(arr[a]);
          }
        }
        if (this_total == 0) {
          document.form.rid_range.value =  '';  
          return;
        }
        rng = rng.sort(sortNumber);

        var low = rng[0];
        var high = rng.pop();

        if ((low == high) && (low == 0)) {
          document.form.rid_range.value =  '';     
          return;
        }

        if (low == high) {
          document.form.rid_range.value =  high + '%';
        }
        else {
          document.form.rid_range.value = low + '% - ' + high + '%';
        }
      }

      function sortNumber(a,b) {
        return a - b;
      }

      function replacer(d) {
        return d.replace('%','');
      }

      function roundNumber(rnum, rlength) {
        // Arguments: number to round, number of decimal places
        var newnumber = Math.round(rnum*Math.pow(10,rlength))/Math.pow(10,rlength);
        return newnumber;
      } 
4

2 に答える 2

0

ドキュメントがロードされたときに、すべての JavaScript コードを実行する必要があります。

window.onload = function() {
    // your js code here
};

説明: ロード イベントは、ドキュメントのロード プロセスの最後に発生します。この時点で、ドキュメント内のすべてのオブジェクトが DOM 内にあります。そのため、ドキュメントが解析される前にスクリプトが実行されると、プロパティを読み込もうとするとエラーが発生します。

于 2013-02-20T22:48:09.090 に答える
0

通常のケーキのセットアップ(を介してdefault.ctpでスクリプトを宣言echo $this->Html->script('tid');)でスクリプトを使用できることを再確認し、javascriptコンソールで表示されたエラーを再確認した後、問題をjavascriptに絞り込みました。結局のところ、cakephp で生成されたフォームから誤って値にアクセスしようとしていました。

問題を修正するには、javascript を変更してdocument.form.fieldname.valuedocument.getElementById('ModelFieldName').valueケーキで作成された ID に基づいて正しいフォーム要素にアクセスする必要がありました。

于 2013-02-21T17:19:53.397 に答える