За последние 24 часа нас посетили 20940 программистов и 1014 роботов. Сейчас ищут 410 программистов ...

Используйте клавиши со стрелками для перемещения по таблице HTML.

Тема в разделе "JavaScript и AJAX", создана пользователем ara05ru, 8 авг 2019.

  1. ara05ru

    ara05ru Новичок

    С нами с:
    18 апр 2019
    Сообщения:
    68
    Симпатии:
    0
    Помогите новичку в js. Нашел вот такой код для использования стрелок клавиатуры для перемещения по таблице HTML. Только проблема в том, что начальная ячейка для перемещения начинается всегда с одной и той же. А нужно чтоб начиналось с той, которую кликнул.
    Код (Javascript):
    1. var start = document.getElementById('start');
    2. start.focus();
    3. start.style.backgroundColor = 'green';
    4. start.style.color = 'white';
    5.  
    6. function dotheneedful(sibling) {
    7.   if (sibling != null) {
    8.     start.focus();
    9.     start.style.backgroundColor = '';
    10.     start.style.color = '';
    11.     sibling.focus();
    12.     sibling.style.backgroundColor = 'green';
    13.     sibling.style.color = 'white';
    14.     start = sibling;
    15.   }
    16. }
    17.  
    18. document.onkeydown = checkKey;
    19.  
    20. function checkKey(e) {
    21.   e = e || window.event;
    22.   if (e.keyCode == '38') {
    23.     // up arrow
    24.     var idx = start.cellIndex;
    25.     var nextrow = start.parentElement.previousElementSibling;
    26.     if (nextrow != null) {
    27.       var sibling = nextrow.cells[idx];
    28.       dotheneedful(sibling);
    29.     }
    30.   } else if (e.keyCode == '40') {
    31.     // down arrow
    32.     var idx = start.cellIndex;
    33.     var nextrow = start.parentElement.nextElementSibling;
    34.     if (nextrow != null) {
    35.       var sibling = nextrow.cells[idx];
    36.       dotheneedful(sibling);
    37.     }
    38.   } else if (e.keyCode == '37') {
    39.     // left arrow
    40.     var sibling = start.previousElementSibling;
    41.     dotheneedful(sibling);
    42.   } else if (e.keyCode == '39') {
    43.     // right arrow
    44.     var sibling = start.nextElementSibling;
    45.     dotheneedful(sibling);
    46.   }
    47. }
    Код (CSS):
    1. table {
    2.   border-collapse: collapse;
    3.   border: 1px solid black;
    4. }
    5.  
    6. table td {
    7.   border: 1px solid black;
    8.   padding: 10px;
    9.   text-align: center;
    10. }
    HTML:
    1.   <tbody>
    2.     <tr>
    3.       <td id='start'>1</td>
    4.       <td>2</td>
    5.       <td>3</td>
    6.       <td>4</td>
    7.     </tr>
    8.     <tr>
    9.       <td>5</td>
    10.       <td>6</td>
    11.       <td>7</td>
    12.       <td>8</td>
    13.     </tr>
    14.     <tr>
    15.       <td>9</td>
    16.       <td>10</td>
    17.       <td>11</td>
    18.       <td>12</td>
    19.     </tr>
    20.     <tr>
    21.       <td>13</td>
    22.       <td>14</td>
    23.       <td>15</td>
    24.       <td>16</td>
    25.     </tr>
    26.   </tbody>
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
    Сделайте за меня ?
     
  3. ara05ru

    ara05ru Новичок

    С нами с:
    18 апр 2019
    Сообщения:
    68
    Симпатии:
    0
    за меня не прошу делать. подскажите что сделать. я понимаю что когда указываю для <td> id="start", то с этой ячейки и начинается перемещение. А вот не могу понять как сделать чтоб начиналось с места, куда кликнул.
    Помогите пожалуйста.
     
  4. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @ara05ru вот я вам подсказал, вам это что то дало?
    Код (Javascript):
    1. var td = document.querySelectorAll('td');
    2.  
    3. if(td.length !== 0)
    4. {
    5.     [].forEach.call(td, function(item)
    6.     {
    7.         console.log(item);
    8.     } );
    9. }
     
  5. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @ara05ru держите, серавну ничему не научитесь
    Код (Javascript):
    1. <table>
    2.   <tbody>
    3.     <tr>
    4.       <td>1</td>
    5.       <td>2</td>
    6.       <td>3</td>
    7.       <td>4</td>
    8.     </tr>
    9.     <tr>
    10.       <td>5</td>
    11.       <td>6</td>
    12.       <td>7</td>
    13.       <td>8</td>
    14.     </tr>
    15.     <tr>
    16.       <td>9</td>
    17.       <td>10</td>
    18.       <td>11</td>
    19.       <td>12</td>
    20.     </tr>
    21.     <tr>
    22.       <td>13</td>
    23.       <td>14</td>
    24.       <td>15</td>
    25.       <td>16</td>
    26.     </tr>
    27.   </tbody>
    28. </table>
    29. <script>
    30. var td = document.querySelectorAll('td');
    31.  
    32. if(td.length !== 0)
    33. {
    34.     var start = td[0];
    35.  
    36.     [].forEach.call(td, function(item)
    37.     {
    38.         item.addEventListener( 'click', function()
    39.         {
    40.             start.style.backgroundColor = '';
    41.             start.style.color = '';
    42.             start = this;
    43.             start.focus();
    44.             start.style.backgroundColor = 'green';
    45.             start.style.color = 'white';
    46.         } );
    47.  
    48.     });
    49. }
    50.  
    51. document.addEventListener('keydown', function(e)
    52. {
    53.     e = e || window.event;
    54.     if (e.keyCode == '38') {
    55.         // up arrow
    56.         var idx = start.cellIndex;
    57.         var nextrow = start.parentElement.previousElementSibling;
    58.         if (nextrow != null) {
    59.         var sibling = nextrow.cells[idx];
    60.         dotheneedful(sibling);
    61.         }
    62.     } else if (e.keyCode == '40') {
    63.         // down arrow
    64.         var idx = start.cellIndex;
    65.         var nextrow = start.parentElement.nextElementSibling;
    66.         if (nextrow != null) {
    67.         var sibling = nextrow.cells[idx];
    68.         dotheneedful(sibling);
    69.         }
    70.     } else if (e.keyCode == '37') {
    71.         // left arrow
    72.         var sibling = start.previousElementSibling;
    73.         dotheneedful(sibling);
    74.     } else if (e.keyCode == '39') {
    75.         // right arrow
    76.         var sibling = start.nextElementSibling;
    77.         dotheneedful(sibling);
    78.     }
    79. } );
    80.  
    81.  
    82. function dotheneedful(sibling) {
    83.   if (sibling != null)
    84.   {
    85.     start.focus();
    86.     start.style.backgroundColor = '';
    87.     start.style.color = '';
    88.     sibling.focus();
    89.     sibling.style.backgroundColor = 'green';
    90.     sibling.style.color = 'white';
    91.     start = sibling;
    92.   }
    93. }
    94. </script>    
     
  6. ara05ru

    ara05ru Новичок

    С нами с:
    18 апр 2019
    Сообщения:
    68
    Симпатии:
    0
    ну хотя бы я понял что это реализуемо. дальше буду искать. спасибо
    --- Добавлено ---
    --- Добавлено ---
    спасибо огромное. я знал что в душе вы добрый человек ).
     
  7. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @ara05ru ну вам то пользы никакой, вы ничему не научились, скопировали чужой код. Что либо сделать вы с ним не сможете. Учить мне вас чему то желания нет, поэтому и показал готовый код =)
     
  8. ara05ru

    ara05ru Новичок

    С нами с:
    18 апр 2019
    Сообщения:
    68
    Симпатии:
    0
    в любом случае я попробую проанализировать этот код и что то для себя понять.
     
  9. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Замените вот тут все одной строчкой, поймете как, считайте что поняли как работает
    Код (Javascript):
    1. item.addEventListener( 'click', function()
    2.         {
    3.  
    4.            // тут нужна одна строка
    5.  
    6.             /*start.style.backgroundColor = '';
    7.             start.style.color = '';
    8.             start = this;
    9.             start.focus();
    10.             start.style.backgroundColor = 'green';
    11.             start.style.color = 'white';*/
    12.         } );
     
  10. ara05ru

    ara05ru Новичок

    С нами с:
    18 апр 2019
    Сообщения:
    68
    Симпатии:
    0
    спасибо что не только помогли, но еще и пытаетесь чему меня научить ). я обязательно выполню это.