javascript - 为什么 Jquery 无法访问我页面上导入的元素

标签 javascript jquery html

我进行了一项更改,列出了数据库中的记录,我的主页使用第二个页面从中加载信息。我希望用户能够单击“x”并能够删除记录。

所以我有我的主页“index.php”和名为“get_results.php”的加载器页面

因此,当我加载index.php时,JS会加载,然后转到get_results.php,然后在屏幕上显示输出,但是,当我单击“x”尝试删除一个部分时,它不起作用。除此之外,我已经在 get_result.php 页面上运行了 JS 脚本,并且删除工作正常。

我不知道如何解决这个问题,我认为这是因为在加载index.php文档后加载新数据(get_results)。

我考虑过在加载此数据时进行更改,但我仍然会遇到同样的问题,因为用户可以单击一个按钮,它会删除数据并将新数据放在那里。

当阅读文档时,我运行这个:

$(".search_results_container").load("get_results.php?service_type=auto #results_output");

这会将新数据加载到其容器中。

然后,当单击 X 时,它应该运行以下代码:

$(".delete_result").on("click", function( e ){
    e.preventDefault();

    var result_id = $(this).data("delete-id");

    // post data to delete page
    $.post("delete_results.php?action=delete&result_id=" + result_id, function( data ){
        // Out delete data
        console.log(data);
       // Refresh list
    } );

});

这是正在加载到容器中的 HTML

<ul class="data_list" id="result_list">
<li>
    <div class="result_info">
        <a href="?action=edit_result&result_id=5" class="update_links">
            <h2>
                Test data 1
                <small>Testing</small>
            </h2>
        </a>
    </div>
    <div class="result_delete_icon">
        <a href="?result_id=5&action=delete" class="delete_result" data-delete-id="5">
            <i class="fa fa-times" style="float: right;"></i>
        </a>    
    </div>
</li>
<div class="result_info">
        <a href="?action=edit_result&result_id=5" class="update_links">
            <h2>
                Test data 1
                <small>Testing</small>
            </h2>
        </a>
    </div>
    <div class="result_delete_icon">
        <a href="?result_id=5&action=delete" class="delete_result" data-delete-id="5">
            <i class="fa fa-times" style="float: right;"></i>
        </a>    
    </div>  
</li>

我真的不知道如何让它工作,我想也许需要刷新一些东西,因为看起来 Jquery 没有在 dom 中找到元素,但我认为如果我引用每个元素有时,它不会将其存储在 var 中,而是会再次遍历 DOM 来获取它。

最佳答案

这并没有做你认为它正在做的事情:

$(".delete_result").on("click", function( e ){

这正在调用选择器".delete_result" 一次,识别当时存在的元素,并将点击处理程序附加到这些元素。处理程序附加到元素,而不是选择器。因此,执行此代码后添加到页面的任何元素都不会附加点击处理程序。

相反,您希望这样做:

$(document).on("click", ".delete_result", function( e ){

这仍然只执行一次,但将处理程序附加到 document (在 DOM 的生命周期中保持不变)。事实上,层次结构中任何常见的不变父元素都可以代替document。 。第二个选择器 ".delete_result" ,用于每个事件来过滤所选子元素中的事件。因此,任何添加到document的元素在 DOM 生命周期的后期,其点击事件仍将“冒泡”至 document并由第二个选择器识别。

有关更多示例和信息,我已 written about this before .

关于javascript - 为什么 Jquery 无法访问我页面上导入的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24911225/

相关文章:

javascript 设置间隔()

javascript - 检查元素是否有东西

jquery - 动态生成 HTML 后显示器发出铃声

html - 使 mp4/h264 视频在 Windows 上的 QtWebEngine 中工作

javascript - 如何使用引导标签输入进行选择

jquery - 当宽度小于 x 像素时禁用 jquery 脚本。响应式菜单

javascript - 合并对象之间的数据,匹配键值

javascript - 在 ejs 模板中获取 url 参数

javascript - 尽管调用了 .fadeOut 命令,但 Gif 没有淡出

javascript - jQuery 克隆 - 生成的克隆控件不起作用