2016-04-05 14 views
0

フォームはNew Row functionスクリプトです。そして、私はこのサイトから、新しいスクリプトナビゲートフォームフィールドにForm Navigation script矢印キーでフォームフィールドをナビゲートする

enter image description here

ナビゲートスクリプトがあるのみ行1で正常に動作しを追加しました。矢印キーを使用してフィールド間を移動することができます(右から左へ、)。私は新しい行を追加する場合、iが2(ダウンまで)の行に移動することができ、私はバック行1(までダウン)へ移動することができず、また、私は(行のフィールド2間を移動することができません、右から左、左から右)。私は再び新しい行を追加する場合、行3ナビゲートスクリプトがまったく動作しないと、私は、行1に行2ダウンまで)から行2を移動することができます〜行3が機能しません。ここで

enter image description here

私のコード、新しい行スクリプトです:

var row_id = 1; 
function addRow(tableID) {    
    var table = document.getElementById(tableID); 
    var rowCount = table.rows.length; 
    var row = table.insertRow(rowCount); 
    var colCount = table.rows[0].cells.length; 
    row.id = 'id' + row_id; 
    row_id++; 
    for(var i=0; i<colCount; i++) { 
     var newcell = row.insertCell(i); 
     newcell.innerHTML = table.rows[0].cells[i].innerHTML; 
     //alert(newcell.childNodes); 
     switch(newcell.childNodes[0].type) { 
      case "text": 
        newcell.childNodes[0].value = ""; 
      break; 
      case "checkbox": 
        newcell.childNodes[0].checked = false; 
      break; 
      case "select-one": 
        newcell.childNodes[0].selectedIndex = 0; 
      break; 
      case "select": 
        newcell.childNodes[0].selectedIndex = 0; 
      break; 
      default: 
        newcell.childNodes[0].value = ""; 
      break; 
     }    
    } 
} 

フォームコード:JS2ファイル内

<div class="row"> 
    <div class="col-md-12"> 
    <div class="table-responsive"> 
     <table class="table table-bordered table-hover table-striped sticky-header"> 
[....] 
<tbody id="dataTable2"> 
    <?php if(!isset($dtdetail)) {; 
     if(isset($message)) { 

     for ($i=0; $i < $jmldtl; $i++) { ?> 

     <tr>                         
      <td> 
       <input type="text" name="tp_sal[]" id="tp_sal" size="5" value="<?php echo set_value('tp_sal['.$i.']'); ?>"/></td> 
      <td> 
       <input type="text" name="r_tpc_1[]" id="r_tpc_1" size="5" value="<?php echo set_value('r_tpc_1['.$i.']'); ?>"/></td> 
      <td> 
       <input type="text" name="r_tpc_2[]" id="r_tpc_2" size="10" value="<?php echo set_value('r_tpc_2['.$i.']'); ?>"/></td> 
      <td> 
       <input type="text" name="r_tpc_3[]" id="r_tpc_3" size="15" value="<?php echo set_value('r_tpc_3['.$i.']'); ?>"/></td> 
      <td> 
       <input type="text" name="r_etr_1[]" id="r_etr_1" size="13" value="<?php echo set_value('r_etr_1['.$i.']'); ?>"/></td>             
     </tr> 
     <?php } } else { ?> 
     <tr>                        
      <td> 
       <input type="text" name="tp_sal[]" id="tp_sal" size="5" value="<?php $a=set_value('tp_sal'); echo $a; ?>"/></td> 
      <td> 
       <input type="text" name="r_tpc_1[]" id="r_tpc_1" size="5" value="<?php $a=set_value('r_tpc_1'); echo $a; ?>"/></td> 
      <td> 
       <input type="text" name="r_tpc_2[]" id="r_tpc_2" size="10" value="<?php $a=set_value('r_tpc_2'); echo $a; ?>"/></td> 
      <td> 
       <input type="text" name="r_tpc_3[]" id="r_tpc_3" size="15" value="<?php $a=set_value('r_tpc_3'); echo $a; ?>"/></td> 
      <td> 
       <input type="text" name="r_etr_1[]" id="r_etr_1" size="13" value="<?php $a=set_value('r_etr_1'); echo $a; ?>"/></td>             
     </tr> 
<?php } } else { 
    foreach($dtdetail as $detail) { ?> 
     <tr>              
      <td> 
      <input type="text" name="tp_sal[]" id="tp_sal" size="5" value="<?php echo $detail->tp_sal; ?>"/></td> 
      <td> 
      <input type="text" name="r_tpc_1[]" id="r_tpc_1" size="5" value="<?php echo $detail->r_tpc_1; ?>"/></td> 
      <td> 
      <input type="text" name="r_tpc_2[]" id="r_tpc_2" size="10" value="<?php echo $detail->r_tpc_2; ?>"/></td> 
      <td> 
      <input type="text" name="r_tpc_3[]" id="r_tpc_3" size="15" value="<?php echo $detail->r_tpc_3; ?>"/></td> 
      <td> 
      <input type="text" name="r_etr_1[]" id="r_etr_1" size="13" value="<?php echo $detail->r_etr_1; ?>"/></td>            
     </tr> 
<?php } } ?> 
</tbody> 
<tfoot class="bg-primary"> 
    <tr> 
     <td colspan="31" align="center"> 
      <?php if(!isset($dtdetail)) {?> 
       <button type="button" class="btn btn-sm btn-info" onClick="addRow('dataTable2')">New Row</button> 
      <?php } else { ?> 
       <button type="button" class="btn btn-sm btn-info" onClick="addRow('dataTable2')">New Row</button> 
      <?php } ?> 
     </td> 
    </tr> 
</tfoot> 
[.....] 

<?php 
$this->load->view('template/js2'); 
?> 

フォームナビゲーションスクリプト:

<script type="text/javascript"> 
    /*! 
* formNavigation 
* Copyright 2013 Ole Bjørn Michelsen <http://ole.michelsen.dk/> 
* MIT license 
*/ 
(function ($) { 
    $.fn.formNavigation = function() { 
     $(this).each(function() { 
      $(this).find('input').on('keyup', function(e) { 
       switch (e.which) { 
        case 39: 
         $(this).closest('td').next().find('input').focus(); break; 
        case 37: 
         $(this).closest('td').prev().find('input').focus(); break; 
        case 40: 
         $(this).closest('tr').next().children().eq($(this).closest('td').index()).find('input').focus(); break; 
        case 38: 
         $(this).closest('tr').prev().children().eq($(this).closest('td').index()).find('input').focus(); break; 
       } 
      }); 
     }); 
    }; 
})(jQuery); 
</script> 

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('.table').formNavigation(); 
    }); 
</script> 
+0

ユーザーがテキストボックス内の文字列内を移動したい場合はどうなりますか?私はこれがアクセシビリティの観点から悪いデザインであることは恐れています。 – TeaCode

+0

ええと、あなたの提案をお聞かせください、私はどのようなデザインをするべきですか?ああ、私のコードをどうやって作っているのか分かっているなら、答えを教えてください。 – metaphor

答えて

2

問題

ナビゲーションスクリプトは唯一それが実行された時点で、テーブルの行に適用されるので、これが起こっています。だから、フォームのナビゲーションスクリプトは文書readyイベント上で実行されます。

$(document).ready(function() { 
    $('.table').formNavigation(); 
}); 

ページのHTML構造はのAddRow()関数は、これまでと呼ばれである、完全にロードされたときに、このイベントが発生します。 addRow()関数が呼び出されると、新しい行が追加されますが、この新しい行には、ナビゲーションイベントハンドラが適用されません。

ソリューション

あなたのAddRow()関数の最後に$(row).formNavigation();を追加し、この問題を解決するには。

+0

あなたの説明では、あなたの解決策によって既に働いていたスクリプトをありがとうございました。 – metaphor

+0

hi @ jon-anderson私は新しい類似の問題を抱えていますが、まだ_addRow()_ functionに問題が発生しています。私は新しいスクリプト_getWarning()_を作成しました。このスクリプトは、テキストフィールドのバックグラウンドカラーバリデーション[getWarning function](http://pastebin.com/fX67mVnH)に使用されています。仕様は** Row 1 **でしか動作しません。仕様番号1の_Row 1_のデータを入力するとスクリプトは正しく実行されますが、新しい行を追加する場合は_Row 2_を使用し、仕様番号のデータを入力します2のテキストフィールドに既に "finish"文字列がある場合、スクリプトは常にspec番号1を実行します – metaphor

関連する問題