Jquery 不使用动态创建的表

标签 jquery html ajax

我有一个简单的网页,它使用 jquery 模板插件在页面加载时使用 json 调用将数据动态加载到表中。在该表中,我想放置按钮/div 或任何可点击的东西,然后我可以在上面放置一个函数,该函数将打开一个新页面来编辑该列的内容。

问题是我放在表格中的按钮中没有任何 jquery 东西起作用。如果我将相同的按钮放在表格之外(即不动态生成它)那么它工作正常但是我没有每列一个按钮。

这是我在页面加载时得到的

$(document).ready(function() {
    $.ajax({
        type: 'POST',
        dataType: "json",
        url: "http://server:8000/categories/list",
        success: function (data) {
                LoadCategories(data['CategoryList']);
        }
    });

    $(".editButton").button(); // using jquery-ui
    $(".editButton").click( function() {
        alert("Button has been clicked");
    });
});

我的模板看起来像

   <script id="catTemplate" type="text/x-jquery-tmpl">  
        <tr id="$CategoryId">  
            <td> <button id="edit-${CategoryId}" class="editButton"> Edit</button> </td>
            <td> ${CategoryName}</td>
            <td> ${OtherValue} </td>
        </tr>  
    </script>  

该表正确加载所有内容,只是 jquery 内容未应用于动态生成的内容。为什么会这样?我怎样才能让按钮执行我想要的操作?

最佳答案

用于添加点击处理程序的 jquery 可能在内容实际出现在页面中之前运行。请记住,Ajax 调用是异步的,因此您的 ajax 调用只是 ajax 调用的开始。直到 success 函数才完成。

我建议在您实际将内容添加到页面后,将对 ajax 加载内容的任何修改放入成功处理程序。

您还可以使用:

$(".editButton").live('click', function() {
    alert("Button has been clicked");
});

因为实时处理程序将捕获文档级别的所有点击,然后检查您是否已在此处为它们添加点击处理程序(因此即使您在将元素添加到页面之前指定它也会起作用),但这比在成功处理程序中将对象添加到页面后直接对对象进行操作效率要低一些。

关于Jquery 不使用动态创建的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6839859/

相关文章:

jQuery:调用 click();从另一次点击();

jquery - 使用 jQuery Address 插件和 Rails 3 远程链接进行双重远程调用

javascript - 在 AJAX 请求时或之后检查 Internet 连接的可靠方法?

angularjs - 如何修复我的应用程序中的 angular.js 路由?

javascript - Drupal查看ajax错误

javascript - 将 .html 与 JQuery 一起使用不会将数组中的所有项目发布到 HTML

javascript - 如何制作一个轻量级的滚动菜单

html - 为什么两个行内元素之间的额外空间填充了背景颜色,而两个行内 block 元素之间的空间却没有?

javascript - 登录失败时不刷新

html - Flexbox 子项中的 CSS 可滚动内容