使用jquery单击按钮时可编辑的引导表行

Posted

技术标签:

【中文标题】使用jquery单击按钮时可编辑的引导表行【英文标题】:Editable bootstrap table row on button click using jquery 【发布时间】:2019-04-24 19:29:42 【问题描述】:

我正在尝试使用 Jquery 在单击按钮时编辑引导表的值。我参考了这篇文章making row editable 它工作得很好。我唯一的问题是双击按钮进入编辑模式。这是我的代码 sn-p

$('.editbtn').click(function () 
              var currentTD = $(this).parents('tr').find('td');
              if ($(this).html() == 'Edit') 
                  currentTD = $(this).parents('tr').find($("td").not(":nth-child(1)"));
                  $.each(currentTD, function () 
                      $(this).prop('contenteditable', true).css(
                        'background':'#fff',
                        'color':'#000'

                    )
                  );
               else 
                 $.each(currentTD, function () 
                      $(this).prop('contenteditable', false).removeAttr("style");
                  );
              
    
              $(this).html($(this).html() == 'Edit' ? 'Save' : 'Edit')
              if ($(this).html() == 'Save')
                $(this).prop('contenteditable',false)
              
    
          );
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<table id="tableone" class="table table-striped table-dark table-bordered" border="1">
        <thead>
            <tr>
                <th scope="col">Date</th>
                  <th scope="col">Name</th>

                  <th scope="col">Status</th>
            </tr>
        </thead>
       
<tbody>
               <tr>
                  <td>21st August</td>
                  <td>abc</td>
                 
                       <td  contenteditable="false"><button type="button"class="btn btn-primary editbtn">Edit</button>
                    <button type="button" class="btn btn-danger">
                    Delete
                     </button></td>
               </tr>
            <tr>
                  <td>21st August</td>
                  <td>abc</td>
             
                      <td  contenteditable="false"><button type="button" class="btn btn-primary editbtn" >
                     Edit
                     </button>
                    <button type="button" class="btn btn-danger">
                    Delete
                     </button></td>
               </tr>  
               <tr>
                  <td>21st August</td>
                  <td>abc</td>
         
                    <td  contenteditable="false"><button type="button" class="btn btn-primary editbtn" >
                     Edit
                     </button>
                    <button type="button" class="btn btn-danger">
                    Delete
                     </button></td>
               </tr>  <tr>
                  <td>21st August</td>
                  <td>abc</td>
              

                  <td  contenteditable="false"><button type="button" class="btn btn-primary editbtn">
                     Edit
                     </button>
                    <button type="button" class="btn btn-danger">
                    Delete
                     </button></td>
               </tr>
            </tbody>
    </table>

这里我禁用了编辑一列中的数据。如您所见,当我们单击第一行中的编辑按钮时,只需单击一次,但对于其余行,则需要多次单击。多次单击后,它会在单击编辑模式,直到刷新页面。我不知道我错过了哪里。我会感谢你的帮助。

【问题讨论】:

【参考方案1】:

问题在于这一行:它考虑了 line,而您却考虑了 $(this).html()

<button type="button" class="btn btn-primary editbtn" >
                     Edit
                     </button>

为什么它在下次点击时起作用,因为在您的代码中您更改为 Edit

$(this).html($(this).html() == 'Edit' ? 'Save' : 'Edit')

您可以尝试以下操作:

使用$(this).text().trim() 或更正该行:

<button type="button" class="btn btn-primary editbtn" >Edit</button>

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
  <script>
  $(document).ready(function()
  $('.editbtn').click(function () 
              var currentTD = $(this).parents('tr').find('td');
              //alert('this '+$(this).html() );
              if ($(this).text().trim() == 'Edit') 
                  currentTD = $(this).parents('tr').find($("td").not(":nth-child(1)"));
                  //alert("first if "+currentTD.html());
                  $.each(currentTD, function () 
                      $(this).prop('contenteditable', true).css(
                        'background':'#fff',
                        'color':'#000'

                    )
                  );
               else 
               // alert("second if "+currentTD.html());
                 $.each(currentTD, function () 
                    //alert("second if "+currentTD.html());
                      $(this).prop('contenteditable', false).removeAttr("style");
                  );
              
    
              $(this).html($(this).html() == 'Edit' ? 'Save' : 'Edit')
              if ($(this).html() == 'Save')
               // alert("third if "+currentTD.html());
                $(this).prop('contenteditable',false)
              
    
          );
          );
  </script>
</head>
<body>
<table id="tableone" class="table table-striped table-dark table-bordered" border="1">
        <thead>
            <tr>
                <th scope="col">Date</th>
                  <th scope="col">Name</th>

                  <th scope="col">Status</th>
            </tr>
        </thead>
       
<tbody>
               <tr>
                  <td>21st August</td>
                  <td>abc</td>
                 
                       <td  contenteditable="false"><button type="button"class="btn btn-primary editbtn">Edit</button>
                    <button type="button" class="btn btn-danger">
                    Delete
                     </button></td>
               </tr>
            <tr>
                  <td>21st August</td>
                  <td>abc</td>
             
                      <td  contenteditable="false"><button type="button" class="btn btn-primary editbtn" >Edit</button>
                    <button type="button" class="btn btn-danger">
                    Delete
                     </button></td>
               </tr>  
               <tr>
                  <td>21st August</td>
                  <td>abc</td>
         
                    <td  contenteditable="false"><button type="button" class="btn btn-primary editbtn" >Edit</button>
                    <button type="button" class="btn btn-danger">
                    Delete
                     </button></td>
               </tr>  <tr>
                  <td>21st August</td>
                  <td>abc</td>
              

                  <td  contenteditable="false"><button type="button" class="btn btn-primary editbtn">Edit</button>
                    <button type="button" class="btn btn-danger">
                    Delete
                     </button></td>
               </tr>
            </tbody>
    </table>
</body>
</html>

【讨论】:

以上是关于使用jquery单击按钮时可编辑的引导表行的主要内容,如果未能解决你的问题,请参考以下文章

如何使引导表行可点击? [复制]

iOS - 使 UITableView 与自定义单元格在按钮单击时可编辑

ExtJs 属性网格 - 选定的行可编辑?

使用 jquery 在引导程序中获取选定表行的值

X - 单击其他元素时可编辑的可编辑输入

检查材料表行是不是仍处于编辑模式