Nano Hash - криптовалюты, майнинг, программирование

Модальная кнопка работает только для каждой второй строки, почему она не работает для каждой строки?

HTML-код:

      <html>
             <head>
           <link rel="stylesheet" type="text/css" href="css/tablestyle.css">
        </head>

       <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"> </script>

            <script type="text/javascript" src="datasource/people.json"> </script>

            <script>

            $(function() {

  var people = [];

   $.getJSON('datasource/people.json', function(data) {
      $.each(data.person, function(i, f) {
        var tblRow = "<tr>" + "<td><button class='button-border   toggleModal'><span class='icon'></span> Timesheet Approval</button></td>" + "  <td>" + f.lastName + "</td>" + "<td>" + f.job + "</td>" + "<td>" + f.roll + " </td>" + "<td>" + f.hours + "</td>" + " </tr>"
            $(tblRow).appendTo("#userdata tbody");

                     $('.toggleModal').on('click', function (e) {
                       $('.modal').toggleClass('active');

                    });
                     });

                });

              });
           </script>

             <body>
        <table id="userdata" rules="groups" style="border: 1px solid             black;">
<thead>

    <tr>
                    <th> </th>
                    <th>EmployeeNum</th>
                    <th>EmployeeName</th>
                    <th>ChargeNum</th>
                    <th>Hours</th>
            </tr>
      </thead>

    <tbody>



    </tbody>



          </table>
          <div class="modal">

<header>
  <button class="close toggleModal">Close</button>
        </header>

        <section>
  <p>To approve the timesheet and submit it to WAM press "Approve", to decline the timesheet for later viewing press "Disapprove"</p>
       </section>

         <button class="button-border button-success toggleModal">
            <span class="icon"></span> Approve </button>

          <button class="button-border button-error pull-right toggleModal">
                <span class="icon">< </span> Disapprove </button>
                       <!-- <script> $(docuemnt).ready(function(){ -->
                           <!-- var rowCount = $('table#tableId tr:#a').index() + 1; -->
                    <!-- $("#a").style.color = "red"}); -->
                    <!-- </script> -->

           </div>


            <script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>

<script src="js/index.js"></script>


          </body>
          </html>

CSS-код:

    html{
        font:0.75em/1.5 sans-serif;
        color:#333;
        background-color:#fff;
        padding:1em;
    }

    /* Tables */
 table{
width:100%;
        margin-bottom:1em;
        border-collapse: collapse;
        border: 1px;
    }
  th{
font-weight:bold;
        background-color:#ddd;
    }

  td{
padding:0.5em;
        border:1px solid black;

    }

  tr:nth-child(even) {
background-color: #ddd;

}

  a.button {
-webkit-appearance: button;
-moz-appearance: button;
appearance: button;

text-decoration: none;
color: initial;
 }      

  @font-face {
 font-family: 'ios7-icon';
  src: url("//ios7-icon-font-demo.herokuapp.com/fonts/ios7-icon.woff") format("woff"), url("//ios7-icon-font-demo.herokuapp.com/fonts/ios7-icon.ttf") format("ttf");
font-weight: normal;
 font-style: normal;
  }
   *, *:before, *:after {
 -moz-box-sizing: border-box;
 -webkit-box-sizing: border-box;
 box-sizing: border-box;
     }

   body {
padding: 50px;
font-family: 'Helvetica Neue' !important;
 font-weight: 300;
       }

     .wrapper {
 max-width: 500px;
 margin: 0 auto;
            }

     h1 {
   font-weight: 100;
 font-size: 45px;
 color: #007aff;
        }

    h2 {
font-weight: 500;
font-size: 21px;
margin-bottom: 15px;
     }

       section {
 margin-top: 30px;
    }
    section p {
line-height: 1.4;
margin-bottom: 20px;
      }



   button {
 -webkit-appearance: none;
-moz-appearance: none;
 -ms-appearance: none;
 -o-appearance: none;
 appearance: none;
 -moz-border-radius: 6px;
 -webkit-border-radius: 6px;
 border-radius: 6px;
 border: none;
 outline: none;
 font: inherit;
 cursor: pointer;
 margin: 0;
 padding: 0;
 background: LightBlue; 
color: #007aff;
 font-weight: 300;
 font-size: 14px;
 -moz-border-radius: 0px;
 -webkit-border-radius: 0px;
 border-radius: 0px;
 /* &:nth-child(even){ */
  /* background: white; */
 /* } */
 /*  &:last-child {
     border-color: red;
  margin-bottom: 0;
   }*/
 }
 button:hover {
  text-decoration: underline;
}
  button.button-border {
  -moz-border-radius: 5px;
 -webkit-border-radius: 5px;
  border-radius: 5px;
  padding: 10px 12px 8px 12px;
  border: 1px solid #007aff;
}
  button.button-border:hover { 
  background: #007aff; 
 color: #ffffff; 
 text-decoration: none; 
 } 
button.button-success { 
 /color: #4dd865; */
  border-color: #4dd865; 
 } 
 button.button-success:hover { 
   background: #4dd865; 
 } 
 button.button-error { 
  color: #ff3b30; 
  border-color: #ff3b30; 
 } 
button.button-error:hover { 
  background: #ff3b30; 
 } 

.modal {
 display: none;
 position: fixed;
  top: 50%;
 left: 50%;
 width: 430px;
  height: auto;
  margin-left: -200px;
 margin-top: -150px;
 background-color: #ffffff;
 padding: 25px;
 border-radius: 5px;
 z-index: 10;
  box-shadow: 0 0 0 9999px rgba(0, 0, 0, 0.5);
   }
   .modal.active {
  display: block;
    }
.modal header {
 position: relative;
}
.modal h2 {
  text-align: center;
}
.modal .close {
 position: absolute;
 top: 3px;
 right: 0;
  margin: 0;
}

.pull-right {
 float: right;
}

.icon {
 display: inline-block;
  font-size: inherit;
   font-family: circle;
   margin-right: 5px;
   color: inherit;
  -webkit-text-rendering: geometricPrecision;
  -moz-text-rendering: geometricPrecision;
  -ms-text-rendering: geometricPrecision;
  -o-text-rendering: geometricPrecision;
  text-rendering: geometricPrecision;
   }

Код Json, который вводит данные таблицы:

{
    "person": [
    {
       "firstName": " ",
       "lastName": "Kent",
       "job": "Reporter",
       "roll": 20,
       "hours":10
   },
   {
       "firstName": " ",
       "lastName": "Wayne",
       "job": "Playboy",
       "roll": 30,
       "hours":20
   }
   ]
  }  

Что происходит, так это то, что кнопка, которую я использую в начале строки, будет работать только для каждой другой строки. Кнопка, по сути, позволит человеку принять или отклонить данные в данной строке, поэтому кнопка потребуется для каждой строки. Таблица должна быть динамической, чтобы можно было считывать информацию из источника, отличного от локальной HTML-страницы. Если бы я добавил 3 строки таблицы, работали бы только две из трех кнопок, и даже тогда иногда модальное представление переставало работать. Например, после нажатия кнопки модальное представление появляется с двумя другими кнопками, и прямо сейчас, если вы нажмете любую из этих кнопок, представление закроется. Но при добавлении дополнительных строк при нажатии кнопки в начальной строке кнопки, которые находятся в модальном представлении (которые появляются после нажатия кнопки внутри строки таблицы), не работают. И это поверх начальной кнопки, работающей только для каждой второй строки.


Ответы:


1

Как насчет добавления обработчика после добавления всех строк?

$(function() {
  var people = [];

  $.getJSON('datasource/people.json', function(data) {
    $.each(data.person, function(i, f) {
      var tblRow = "<tr>" + "<td><button class='button-border   toggleModal'><span class='icon'></span> Timesheet Approval</button></td>" + "  <td>" + f.lastName + "</td>" + "<td>" + f.job + "</td>" + "<td>" + f.roll + " </td>" + "<td>" + f.hours + "</td>" + " </tr>"
      $(tblRow).appendTo("#userdata tbody");
    });

    // Add the click handler after adding all table rows
    $('#userdata').on('click', '.toggleModal', function (e) {
      $('.modal').toggleClass('active');
    });
  });
});

В противном случае вы добавляете обработчик один раз в первую строку, дважды во вторую строку, три раза в третью строку и т. д.

И именно поэтому он работает на каждом втором ряду. Двойное переключение (или любое число, кратное 2) приведет к тому, что он включится, а затем выключится.

Кроме того, ваш <tbody> находится в странном месте (внутри головы).

21.07.2017
  • К сожалению, я случайно загрузил более старую версию своего кода. Я отредактировал и внес изменения, которые вы предложили, но у меня все еще та же проблема. 21.07.2017
  • Прошу прощения, вы были правы, я сделал небольшую синтаксическую ошибку. Большое спасибо за быстрый ответ. 21.07.2017
  • Потрясающий! Рад, что это помогло. Не забудьте пометить вопрос как отвеченный, чтобы другие знали, что вы нашли то, что ищете. 21.07.2017
  • Я новичок в HTML, CSS и т. д. Есть ли место, которое вы порекомендуете для изучения, или какие-либо указатели относительно этих языков? 21.07.2017
  • Хм. Ничего особенного: я просто учился, делая. Есть такие ресурсы, как edx, codecademy, khanacademy, thenewboston и т. д. Но я никогда не пользовался ни одним из них. 21.07.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..