我们有两个功能几乎相同的链接 - 调用控制器,删除记录:
// 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()
,但我没有任何明确的答案 - 是否有人可以对此有所了解?