Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >通过单击按钮从表中选择行并更新值。

通过单击按钮从表中选择行并更新值。
EN

Stack Overflow用户
提问于 2019-06-12 06:32:53
回答 1查看 64关注 0票数 0

我正在尝试创建一个编辑按钮,这样当它被单击时,它会选择整个行,并将上面的输入填充其中的值,以便进行修改或更新。我似乎不能让我的代码工作超过3行,因为它会卡在某个地方。在下面的代码中,“修改”按钮不会显示控制台中的任何错误,因此我无法确定我做错了什么。

我正在尝试使用一个动态表创建一个电话簿,该表需要有两个按钮,一个名为修改,另一个名为删除。问题是修改按钮似乎不起作用。提前谢谢你。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var clientList = [{
    name: "Nume1",
    lastName: "Prenume1",
    phone: ["0758066000"],
    initialOrder: 1
  },
  {
    name: "Nume3",
    lastName: "Prenume3",
    phone: ["0758000000"],
    initialOrder: 2
  },
  {
    name: "Nume2",
    lastName: "Prenume2",
    phone: ["0758000000", "0758000000"],
    initialOrder: 3
  },
  {
    name: "Nume4",
    lastName: "Prenume4",
    phone: ["075803481"],
    initialOrder: 4
  },
  {
    name: "Nume5",
    lastName: "Prenume5",
    phone: ["07942990220"],
    initialOrder: 5
  }
];

//drawing the table
function showDataInTable(arr) {
  var tableBody = document.getElementById('tableBody');
  var tableData = "";

  for (var i = 0; i < arr.length; i++) {
    tableData += `
    <tr>
    <td>${clientList[i].name}</td>
    <td>${clientList[i].lastName}</td>
    <td>${clientList[i].phone}</td>
    <td data-index ="${i}" data-id ="modify" class="buttons1">modify</td>
    <td data-index ="${i}" data-id ="delete" class="buttons2">delete</td>
    <tr>
    `;
  }
  tableBody.innerHTML = tableData;
}
showDataInTable(clientList);

//writing the sorting function
function sort(arr, parameter, sortDirection) {

  for (var i = 0; i < arr.length; i++) {

    for (var j = i + 1; j < arr.length; j++) {

      if (sortDirection === "up") {

        if (arr[i][parameter] > arr[j][parameter]) {
          var temp = arr[i];
          arr[i] = arr[j];
          arr[j] = temp;
        }
      } else if (sortDirection === "down") {

        if (arr[i][parameter] < arr[j][parameter]) {
          var temp = arr[i];
          arr[i] = arr[j];
          arr[j] = temp;
        }
      }
    }
  }
  showDataInTable(arr);
}
//table click event
document.getElementById("table").addEventListener("click", tableClicked);

var sortDirection;
var index;
var editingTable;

function tableClicked() {

  //table delete
  function delClient(arr, index) {
    arr.splice(index, 1);
  }

  index = Number(event.target.parentElement.rowIndex - 1);

  if (event.currentTarget.dataset.id == "delete") {

    delClient(clientList, index);
    showDataInTable(clientList);
  }

  // table edit
  if (event.currentTarget.dataset.id == "modify") {
    document.getElementById("nameInput").delete = clientList[index].name;
    document.getElementById("lastNameInput").value = clientList[index].lastName;
    document.getElementById("phoneInput").value = clientList[index].phone;
    document.getElementById("submit").value = "SAVE";
  }

  //table sorting
  if (event.target.tagName == "TH") {

    var headers = document.getElementsByTagName("th");

    for (var i = 0; i < headers.length; i++) {

      headers[i].classList.remove("selected");
    }

    event.target.classList.add("selected");

    if (sortDirection == "up") sortDirection = "down";
    else sortDirection = "up";

    var parameter = event.target.id;
    sort(clientList, parameter, sortDirection);

  }
}

// when form is clicked
document.getElementById("myForm").addEventListener("click", formClicked);

function formClicked() {

  //add client or edit existing
  if (event.target.id == "submit") {

    event.preventDefault();

    var name = document.getElementById("nameInput").value;
    var lastName = document.getElementById("lastNameInput").value;
    var phone = document.getElementById("phoneInput").value;
    phone = phone.split(",");

    if (name && lastName && phone) {

      if (editingTable == true) {

        clientList[index].name = name;
        clientList[index].lastName = lastName;
        clientList[index].phone = phone;
        document.getElementById("submit").value = "ADD CONTACT";
        editingTable = false;

      } else {

        var newClient = {
          name: name,
          lastName: lastName,
          phone: phone
        }
        clientList.push(newClient);
      }

      //redraw the table
      showDataInTable(clientList);

      //reset input fields
      document.getElementById("nameInput").value = "";
      document.getElementById("lastNameInput").value = "";
      document.getElementById("phoneInput").value = "";

    } else {
      alert("INPUT FIELDS ARE INCOMPLETE!");
    }
  }
}

//make sure phoneInput gets numbers 
document.getElementById("phoneInput").addEventListener("keydown", checkInput);
document.getElementById("phoneInput").addEventListener("input", checkInput);

function checkInput() {
  if (/[^0-9]/.test(event.key) && event.keyCode !== 8) {
    event.preventDefault();
  }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
* {
  padding: 0;
  margin: 0;
  box-sizing: border-box;
}

#header {
  font-family: 'Press Start 2P', cursive;
  font-size: 40px;
  color: dodgerblue;
  margin-top: 30px;
}

body {
  text-align: center;
}

p {
  margin-bottom: 10px;
}

form {
  border: 1px solid lightgray;
  padding: 10px;
  display: flex;
  flex-flow: row wrap;
  align-items: center;
  -webkit-box-shadow: 10px 10px 15px -1px rgba(59, 89, 152, 0.85);
  -moz-box-shadow: 10px 10px 15px -1px rgba(59, 89, 152, 0.85);
  box-shadow: 10px 10px 15px -1px rgba(59, 89, 152, 0.85);
}

.input {
  margin-left: 300px;
  margin-right: 300px;
  margin-top: 20px;
}

#name {
  margin: 5px 10px 5px 0;
}

#lastName {
  margin: 5px 10px 5px 0;
}

#phone {
  margin: 5px 10px 5px 0;
}

input {
  vertical-align: middle;
  margin: 5px 10px 5px 0;
  padding: 10px;
  background-color: #fff;
  border: 1px solid grey;
  width: 250px;
}

#submit {
  background-color: dodgerblue;
  border: 1px solid #ddd;
  color: white;
}

#submit:hover {
  background-color: lightblue;
  color: black;
}

table {
  border-collapse: collapse;
  width: 69%;
  margin-top: 50px;
  margin-left: auto;
  margin-right: auto;
  -webkit-box-shadow: 10px 10px 15px -1px rgba(59, 89, 152, 0.85);
  -moz-box-shadow: 10px 10px 15px -1px rgba(59, 89, 152, 0.85);
  box-shadow: 10px 10px 15px -1px rgba(59, 89, 152, 0.85);
}

td {
  padding: 5px;
  cursor: pointer;
  border-bottom: 1px solid lightgrey;
  font-size: 20px;
  border-left: 1px solid grey;
}

th {
  padding: 5px;
  font-size: 25px;
  background-color: dodgerblue;
  color: white;
  font-weight: 100;
  cursor: pointer;
}

@media (max-width: 800px) {
  input {
    margin: 10px 0;
  }
  form {
    flex-direction: column;
    align-items: stretch;
  }
}

.selected {
  background-color: lightskyblue;
  border: 3px solid white;
  color: black;
}

.buttons1:hover {
  background-color: lightgreen;
}

.buttons2:hover {
  background-color: lightcoral;
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta name="description" content="Agenda telefonica">
  <meta name="author" content="Adelina Lipsa">
  <meta name="keywords" content="HTML,CSS,JavaScript">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Agenda telefonica</title>
  <link href="stylesheet.css" rel="stylesheet" type="text/css">
  <script src="javascript.js" defer></script>
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.2/css/solid.css" integrity="sha384-ioUrHig76ITq4aEJ67dHzTvqjsAP/7IzgwE7lgJcg2r7BRNGYSK0LwSmROzYtgzs" crossorigin="anonymous">
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.2/css/fontawesome.css" integrity="sha384-sri+NftO+0hcisDKgr287Y/1LVnInHJ1l+XC7+FOabmTTIK0HnE2ID+xxvJ21c5J" crossorigin="anonymous">
  <link href="https://fonts.googleapis.com/css?family=Press+Start+2P&display=swap" rel="stylesheet">
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


</head>

<body>
  <h1 id="header"><i class="fas fa-phone-square"></i>&nbsp;Phone book</h1>
  <div id="wrapper">
    <div class="input">
      <form id="myForm">
        <p>Nume:</p>
        <input type="text" id="nameInput">
        <p>Prenume:</p>
        <input type="text" id="lastNameInput">
        <p>Telefon:</p>
        <input type="text" id="phoneInput">
        <input type="submit" id="submit" value="ADD CONTACT">
      </form>
    </div>
    <div>
      <table id="table">
        <thead id="thead">
          <tr>
            <th id="name">Nume <i class="fas fa-sort"></i></th>
            <th id="lastName">Prenume <i class="fas fa-sort"></i></th>
            <th id="phone">Telefon <i class="fas fa-sort"></i></th>
            <th colspan="2"></th>
          </tr>
        </thead>
        <tbody id="tableBody"></tbody>
      </table>
    </div>
  </div>
</body>

</html>

EN

回答 1

Stack Overflow用户

发布于 2019-06-12 06:55:41

最大的问题是,您正在切换event.targetevent.currentTarget

由于将单击事件绑定到表,所以event.currentTarget等于表,而不是表单元格。而event.target实际上是表格单元格。

但是您的代码需要if (event.currentTarget.dataset.id == "delete")if (event.currentTarget.dataset.id == "modify"),因为数据属性在单元格上,而不是表上,因此始终是未定义的。

您可能希望这样做会引发错误,但是由于targetcurrentTarget都存在,所以不会抛出。

如果将event.currentTarget()更改为event.target(),则可以删除和修改所有行。还有其他一些问题(比如删除删除最后一个元素而不是单击的元素),但这确实解决了主要问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56564667

复制
相关文章
选择篇(039)-单击按钮时event.target是什么?
导致事件的最深嵌套元素是事件的目标。你可以通过event.stopPropagation停止冒泡
齐丶先丶森
2022/05/12
1.6K0
HTML单击按钮弹出悬浮窗+页面遮罩
<meta charset="utf-8" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" />
用户7718188
2021/10/08
15.8K1
ASP.NET中通过GRIDVIEW"选择"的按钮将数据显示到TEXTBOX中
 <asp:GridView   ID="GridView1" runat="server" DataKeyNames="ckdh" Height="183px" Style="left: 0px; position: relative;             top: -18px; font-size: small;" Width="864px" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" DataSourceID="SqlDataSource1"              AutoGenerateSelectButton="True" CellPadding="4" ForeColor="#333333" GridLines="None"  OnSelectedIndexChanging="GridView1_SelectedIndexChanging" EmptyDataText="未录入">             <PagerStyle HorizontalAlign="Right" BackColor="#FFCC66" ForeColor="#333333"/>             <PagerSettings Mode="NextPreviousFirstLast" FirstPageText="第一页" PreviousPageText="上一页" NextPageText="下一页" LastPageText="最后一页" />             <Columns>                 <asp:BoundField  DataField="ckdh" HeaderText="出库单号" SortExpression="ckdh" />                 <asp:BoundField  DataField="ckkb" HeaderText="出库库别" SortExpression="ckkb" />                 <asp:BoundField  DataField="ypqx" HeaderText="药品去向" SortExpression="ypqx" />                 <asp:BoundField  DataField="ypbh" HeaderText="药品编号" SortExpression="ypbh" />                 <asp:BoundField  DataField="ypmc" HeaderText="药品名称" SortExpression="ypmc" />                 <asp:BoundField  DataField="gg" HeaderText="药品规格" SortExpression="gg" />                 <asp:BoundField  DataField="dw" HeaderText="药品单位" SortExpression="dw" />                 <asp:BoundField  DataField="sj" HeaderText="出库价格" SortExpression="sj" />                 <asp:BoundField  DataField="sl" HeaderText="出库数量" SortExpression="sl" />             </Columns>             <SelectedRowStyle ForeColor="Navy" BackColor="#FFCC66" Font-Bold="True" />             <RowStyle ForeColor="#333333" BackColor="#FFFBD6" />             <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />             <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />             <AlternatingRowStyle BackColor="White" />         </asp:GridView>
风柏杨4711
2021/03/15
2.9K0
Selenium中单击Element:ElementClickInterceptedException
element = driver.find_element_by_css(‘div[class*=”loadingWhiteBox”]’)
kirin
2021/04/02
1.1K0
Android之按钮点击事件(单击、双击、长按等)
在布局文件中添加按钮点击事件 1、在xml文件中 为 Button 添加android:onclick属性
程思扬
2023/07/24
2.4K0
委托(一个主窗体统计多个从窗体的按钮单击的次数)
  最近在学习金老师的《.NET2.0面向对象编程揭秘》,学到了13章,委托、事件驱动和异步调用。书上有个试一试,要求:利用委托,达到一个主窗体统计多个从窗体的按钮单击的次数。 效果如下: fr
八哥
2018/01/18
1.4K0
委托(一个主窗体统计多个从窗体的按钮单击的次数)
MySQL查询某个表中的所有字段并通过逗号分隔连接
想多造一些测试数据,表中字段又多一个个敲很麻烦,导出表中部分字段数据又不想导出ID字段(因为ID字段是自增的,导出后再插入会报唯一性错误),select * 查出来又是所有的字段。 可以通过如下SQL查询表中所有字段通过逗号连接,然后复制出来进行select查询再导出
共饮一杯无
2022/11/24
9.5K0
MySQL查询某个表中的所有字段并通过逗号分隔连接
类模块应用示例:获取单击的命令按钮名称
这个示例来源于ozgrid.com,有兴趣的朋友可以研究。在用户窗体上共有24个命令按钮,如下图1所示。
fanjy
2023/10/04
3010
类模块应用示例:获取单击的命令按钮名称
【说站】Python DataFrame如何根据列值选择行
以上就是Python DataFrame根据列值选择行的方法,希望对大家有所帮助。
很酷的站长
2022/11/24
5.3K0
【说站】Python DataFrame如何根据列值选择行
SQL Server通过创建临时表遍历更新数据
  前段时间新项目上线为了赶进度很多模块的功能都没有经过详细的测试导致了生成环境中的数据和实际数据对不上,因此需要自己手写一个数据库脚本来更新下之前的数据。(线上数据库用是SQL Server2012)关于数据统计汇总的问题肯定会用到遍历统计汇总,那么问题来了数据库中如何遍历呢?好像并没有for和foreach这种类型的功能呀,不过关于数据库遍历最常见的方法当然是大家经常会想到的游标啦,但是这次我并没有使用游标,而是通过创建临时表的方式来更新遍历数据的。
追逐时光者
2020/09/24
2.3K0
SQL Server通过创建临时表遍历更新数据
使用管理门户SQL接口(一)
本章介绍如何在InterSystems IRIS®数据平台管理门户上执行SQL操作。 管理门户界面使用动态SQL,这意味着在运行时准备和执行查询。 Management Portal界面旨在帮助针对小型数据集开发和测试SQL代码。 它不打算用作在生产环境中执行SQL的接口。
用户7741497
2022/06/07
8.4K0
[pr]变速中的“时间插值”选择
【剪辑中那些关于变速的技巧!】https://zhuanlan.zhihu.com/p/40174821 【视频变速的时间插值方式核心原理,你懂吗?】https://zhuanlan.zhihu.com/p/67327108 【更改剪辑的持续时间和速度】https://helpx.adobe.com/cn/premiere-pro/using/duration-speed.html#main-pars_heading_11
杨肆月
2020/09/10
3.9K0
如何在PostgreSQL中更新大表
在Postgres中更新大型表并不像看起来那样简单。如果您的表包含数亿行,您将发现很难及时进行简单的操作,例如添加列或更改列类型。
蒋老湿
2019/11/06
4.8K0
SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段; 方法二:使用拼接SQL,动态列字段; 方法三:使用PIVOT关系运算符,静态列字段; 方法四:使用PIVOT关系运算符,动态列字段; 扩展阅读一:参数化表名、分组列、行转列字段、字段值; 扩展阅读二:在前面的基础上加入条件过滤; 参考文献(References) 二.背景(Contexts) 其实行转列并不是一个什么新鲜的话题
用户1112962
2018/07/03
4.4K0
MySQL中的锁(表锁、行锁)
锁是计算机协调多个进程或纯线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所在有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。
用户1205080
2019/03/19
5.1K0
css选择器选择奇数行或偶数行
:nth-child(n) 选择器匹配属于其父元素的第 N 个子元素,不论元素的类型。
蓓蕾心晴
2022/12/06
2.4K0
点击加载更多

相似问题

PHP通过单击按钮从表中删除行

233

如何通过单击行按钮更新行

13

通过单击按钮从ajax中的表行获取id

210

如何通过单击按钮来更新我的表值?

322

通过单击提交按钮PHP更新下面的表值

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文