我需要一个自定义弹出对话框,以替换数据确认的默认浏览器选项。在网上有很多关于方法数据确认的例子:删除,但是我需要进行小的自定义以使其适用于普通链接。
例如,我会为对话框呈现两种类型的链接:
<%= link_to(scoreboard_team_path(@scoreboard, team), remote: true, method: :delete, data: {confirm: "Are you sure you want to delete?"})%>
<%= link_to "Clear Teams", deleteteams_scoreboard_path(@scoreboard), class: "btn btn-primary reset-link", :data => {:confirm => "Are you absolutely sure you want to delete all teams?"} %>
根据我在线研究的信息,我提出了以下jquery代码,用于对这些类型的链接进行应用程序范围的确认:
$(document).ready(function(){
$.rails.allowAction = function(link) {
if (!link.attr('data-confirm')) {
return true;
}
$.rails.showConfirmDialog(link);
return false;
};
$.rails.confirmed = function(link) {
link.removeAttr('data-confirm');
if(link.hasClass("reset-link")){
window.location.replace("" + link.context.href + "");
} else {
return link.trigger('click.rails');
}
};
$.rails.showConfirmDialog = function(link) {
var html;
var message = link.data("confirm");
html = "<div id=\"dialog-confirm\" title=\"Warning!\">\n <p>"+message+"</p>\n</div>";
return $(html).dialog({
resizable: false,
modal: true,
buttons: {
OK: function() {
$.rails.confirmed(link);
return $(this).dialog("close");
},
Cancel: function() {
return $(this).dialog("close");
}
}
});
};
});
我的问题是文章的作者没有很好地解释发生了什么。
所以我的问题是:
以下代码的含义是什么:
if (!link.attr('data-confirm')) {
return true;
}
在window.location.replace("" + link.context.href + "");
行link.context.href
是什么意思?
答案 0 :(得分:1)
if (!link.attr('data-confirm')) {
return true;
}
基本上,它检查传入的(jQuery)DOM元素的data-confirm
属性值,如果它不存在,该函数将返回true
。
在
window.location.replace("" + link.context.href + "");
行link.context.href
是什么意思?
$().context
已弃用且should not be used。也就是说,它返回jQuery选择器的原始上下文。
一个例子可以给你一个想法:
$('.link' ).context; // Return `document` object
$('.link', $('#wrapper')[0]).context; // Return `#wrapper` object
<div id="wrapper">
<a href="#some-link" class="link">Click me</a>
</div>
在您的情况下,似乎link.context.href
正在获取DOM元素并访问其href
属性。它本来可以做这样的事情link.attr('href')
。但是,如果作者决定以这种方式写作,我想有一些优势。