FastAdmin键值组件动态渲染后按钮失效了,如何解决?

FastAdmin键值组件动态渲染后按钮失效了,如何解决?

fastadmin键值组件(fieldlist)动态渲染导致按钮失效问题详解及解决方案

在使用FastAdmin的键值组件(fieldlist)时,若通过JavaScript动态渲染组件内容后,新增按钮无法响应点击事件,通常是由于事件绑定时机错误导致。本文将深入分析此问题并提供有效解决方案,尤其针对FastAdmin文档中提供的方案失效的情况。

问题根源在于:动态添加的元素在页面初始加载时并不存在,因此页面初始化时绑定的事件监听器无法捕获这些元素的点击事件

解决方法:采用事件委托机制。事件委托将事件监听器绑定到父元素,事件冒泡至父元素时,再判断事件目标元素是否符合条件,从而触发相应事件处理函数。

以下示例代码使用jquery实现事件委托,解决FastAdmin键值组件(fieldlist)动态渲染后按钮失效的问题:

<meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Button append Example</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<table class="table table-responsive fieldlist">     <tr>         <td>ID</td>         <td>Chinese name</td>         <td>English name</td>         <td>Number of pieces</td>         <td>Volume</td>         <td>Gross Weight</td>         <td>Value (USD)</td>         <td>Operate</td>     </tr>     <tr>         <td colspan="8">             <button class="btn btn-primary btn-append">Append</button>         </td>     </tr> </table>
$(document).ready(function() {     $(document).on('click', '.btn-append', function(event) {         event.preventDefault();         // 追加新元素的逻辑         let newRow = `<tr>                         <td>New ID</td>                         <td>New Chinese name</td>                         <td>New English name</td>                         <td>New Number of pieces</td>                         <td>New Volume</td>                         <td>New Gross Weight</td>                         <td>New Value (USD)</td>                         <td><a href="https://www.php.cn/link/8fcd9e5482a62a5fa130468f4cf641ef" class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i> Remove</a></td>                       </tr>`;         $('table.fieldlist').append(newRow);     });      // 为动态添加的删除按钮绑定事件     $(document).on('click', '.btn-remove', function(event) {         event.preventDefault();         $(this).closest('tr').remove();     }); });

这段代码通过 $(document).on(‘click’, …) 将事件监听器绑定到 document 对象上,确保动态添加的 .btn-append 和 .btn-remove 元素的点击事件都能被正确捕获和处理。 这有效解决了动态渲染后按钮失效的问题。 请注意,代码中使用了更简洁的模板字符串来创建新的行。

通过事件委托,即使是动态添加的元素,也能保证其事件能够被正确处理,从而解决FastAdmin键值组件动态渲染后按钮失效的问题。

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享