jQuery preventDefault无法在我用另一个ajax调用添加的表单上运行

时间:2019-02-04 15:17:35

标签: javascript jquery ajax

我执行一个ajax调用,该调用存储一些数据并在表中添加一行。 此行的末尾有一个删除按钮,因此您可以根据需要立即删除创建的行。

由于某些原因,当我单击删除按钮时,我被重定向到我用来从数据库中删除数据的ajax调用的deleteurl。当我重新加载页面并按删除按钮时,它工作正常。

有人知道为什么会这样吗?

要添加的行:

<tr>
    <td>test</td>
    <td>
        <form class="deleteBuildingForm" method="POST" action="http://127.0.0.1:8000/buildingimage/42" accept-charset="UTF-8">
            <input name="_method" type="hidden" value="DELETE">
            <input name="_token" type="hidden" value="EEV90wmDNLMd8hg9ilh6zdDAjVShXW9bfOCXdvml">
            <button type="submit" class="btn btn-danger">
                <i class="far fa-trash-alt"></i>
            </button>
        </form>
    </td>
</tr>

我的jquery代码:

$('.deleteBuildingForm').on('submit', function(e) {
    e.preventDefault();

    axios.delete($(this).attr('action'), []).then(response => {
        $(this).closest('tr').remove();

        $('.successMessages').hide();
    });
});

1 个答案:

答案 0 :(得分:5)

我认为问题在于新行没有绑定事件处理程序,因为它们是动态创建的。

Event binding on dynamically created elements?

尝试将事件处理程序添加到将始终存在的文档中。

$(document).on('submit','.deleteBuildingForm' ,function(e) {
    e.preventDefault();

    axios.delete($(this).attr('action'), []).then(response => {
        $(this).closest('tr').remove();

        $('.successMessages').hide();
    });
});