数据确认适用于$(document).on(),但不适用于$(" body")。on()

时间:2017-11-13 20:51:57

标签: jquery ruby-on-rails

我们有两个功能几乎相同的链接 - 调用控制器,删除记录:

// g.js
$("body").on('click', 'a.delete-gene-file', function(e){
    e.preventDefault();
    var gene_id = $(this).closest("td").attr("related-data-id");
    var url = $(this).attr("href") + "?img_for_gene=" + gene_id;
    $.ajax({
        url: url,
        type: "DELETE",
        success: function(response) {
            $(".ajax-replace.gene-file").html(response);
        },
        error: function(data) {
            alert(data.responseText);
        }
    });
});

// p.js
$(document).on("click", "a.delete-publication-file", function(e) {
    e.preventDefault();
    var row = $(this).closest("tr");
    var pub_id = $(this).closest("td").attr("related-data-id");
    var url = $(this).attr("href") + "/?publication_from=" + pub_id
    $.ajax({
        url: url,
        type: "DELETE",
        success: function(response) {
            $(row).hide();
        },
        error: function(data) {
            alert(data.responseText);
        }
    });
});

这两个处理程序都附加到在Rails视图中以相同方式创建的链接:

<%= link_to '(-)Remove File', uf,
    :class=> "delete-gene-file",
    :data=> {
        :confirm => "Are you sure you want to permanently delete this file? This cannot be undone."
    }
%>

不同之处在于附加到body的第一个处理程序将完全触发,然后请求确认(有效地使确认无效并立即删除记录),而第二个处理程序附加到{{ 1}},将正确地询问确认,并且仅在用户按下确定时才触发。

我天真的猜测是,UJS用来触发处理程序时发出的确认信息附加到文档上,并且附加到正文不允许事件冒泡到文档,从而使其无法集成正确(因此document之后的.confirm(),但我没有任何明确的答案 - 是否有人可以对此有所了解?

0 个答案:

没有答案