javascript - 向表中添加更多行后,模态 onclick 按钮不起作用

标签 javascript html css onclick bootstrap-modal

这是我的一小段代码:https://jsfiddle.net/DurangoJohnson/bmg0fLvL/2/

目前在 fiddle 中它显示 5 行。如果您要添加另一行,则单击该行中的按钮后弹出的模态窗口中的按钮将不起作用。

这是一个包含 6 行的表格,作为确切错误的引用: https://jsfiddle.net/DurangoJohnson/bmg0fLvL/3/

我假设需要修复的是向行添加一个 id。对于我想要完成的工作,我想让 employeeNum 字段成为 id(我喜欢这种方法,因为它会更加动态和灵活,而不是在表数据本身中为每个条目提供一个静态 id)。是的,列名称和内部的实际数据不相关,因为这仍在进行中,只是试图让功能方面发挥作用。

 $(function() {

        var people = [];
var data = {
  "person": [
   {

       "firstName": " ",
       "lastName": "Kent",
       "job": "Reporter",
       "roll": 20,
       "hours":10
   },
   {
       "firstName": " ",
       "lastName": "Wayne",
       "job": "Playboy",
       "roll": 30,
       "hours":20
   },
    {
    "firstName": " ",
    "lastName": "Scott",
    "job": "PaperMan",
    "roll": 20,
    "hours": 40
   },
    {
    "firstName": " ",
    "lastName": "Mike",
    "job": "writer",
    "roll": 12,
    "hours": 30
   },
    {
    "firstName": " ",
    "lastName": "Charlie",
    "job": "Driver",
    "roll": 2,
    "hours": 23
   }
           ]
        };

var row = 0;

$.each(data.person, function(i, f) {
  var tblRow = "<tr>" + "<td><button class='button-border toggleModal toggleModalFromTable'><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");
  $('#userdata').on('click', '.toggleModalFromTable',  function (e) {
        row = $(this).closest('tr').index() + 1;
    $('.modal').toggleClass('active');
        });
});

$('.approve').click(function(){
         $('.modal').toggleClass('active');
   $('table tbody tr:nth-child(' + row + ')').remove();
});

$('.disapprove').click(function(){
        $('.modal').toggleClass('active');
  $('table tbody tr:nth-child(' + row + ')').css({
        'background': 'red'
  });
});
});
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;
}
<html>

<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"> </script>
<link rel="stylesheet" type="text/css" href="css/styleYo.css">
<script type="text/javascript" src="js/daScript.js"> </script>
<!-- Not being used -->
<!-- <script type="text/javascript" src="datasource/people.json"> </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 approve">
      <span class="icon"></span> Approve </button>

    <button class="button-border button-error pull-right toggleModal disapprove">
      <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>

最佳答案

尝试将您的点击事件处理程序从每个循环中取出。 您只需将处理程序附加到表一次。

var people = [];
var data = {
  "person": [{
    "firstName": " ",
    "lastName": "Kent",
    "job": "Reporter",
    "roll": 20,
    "hours": 10
  }, {
    "firstName": " ",
    "lastName": "Wayne",
    "job": "Playboy",
    "roll": 30,
    "hours": 20
  }, {
    "firstName": " ",
    "lastName": "Scott",
    "job": "PaperMan",
    "roll": 20,
    "hours": 40
  },
    {
    "firstName": " ",
    "lastName": "Mike",
    "job": "writer",
    "roll": 12,
    "hours": 30
   },
    {
    "firstName": " ",
    "lastName": "Charlie",
    "job": "Driver",
    "roll": 2,
    "hours": 23
   },
   {    
    "firstName": " ",
    "lastName": "Tom",
    "job": "Cook",
    "roll": 1,
    "hours": 40
    }

  ]
};

var row = 0;

$('#userdata').on('click', '.toggleModalFromTable', function(e) {
  row = $(this).closest('tr').index() + 1;
  $('.modal').toggleClass('active');
});

$.each(data.person, function(i, f) {
  var tblRow = "<tr>" + "<td><button class='button-border toggleModal toggleModalFromTable'><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");

});

$('.approve').click(function() {
  $('.modal').toggleClass('active');
  $('table tbody tr:nth-child(' + row + ')').remove();
});

$('.disapprove').click(function() {
  $('.modal').toggleClass('active');
  $('table tbody tr:nth-child(' + row + ')').css({
    'background': 'red'
  });
});
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;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<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 approve">
    <span class="icon"></span> Approve </button>

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

</div>

关于javascript - 向表中添加更多行后,模态 onclick 按钮不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45336827/

相关文章:

javascript - 单击一次时如何隐藏按钮,它将显示当前时间和日期

javascript - 尝试根据 Node.js 的 URL 更改周长

Javascript 执行预期的操作

javascript - 单击按钮后更新数据库(这可能看起来很简单,但它不起作用,请继续阅读)

html - 用 "dynamic height"创建一个盒子

html - 很棒的字体不适用于任何 iE 或 Edge

html - 具有流动宽度的静态侧边栏

css - 嵌入 SVG 到 CSS 背景的动画

javascript - 使用 JavaScript 的模板字符串

javascript - 我如何使用 CKEditor focusManager 类?