我遇到了问题,我正在努力。我想在确认后重定向到链接href="/jobs/emp/del/?id={{ job.pk }}"
。我正在使用bootboxjs
{% for job in jobs %}
<a class="btn deleteJob" href="/jobs/emp/del/?id={{ job.pk }}"</a>
{% for job in jobs %}
在执行链接/jobs/emp/del/?id={{ job.pk }}
之前,如何确认?
我试过了:
<a class="btn deleteJob"><span style="display:none">/jobs/emp/del/?id={{ job.pk }}</span>
<i class="icon-trash"></i></a>
<script src="/static/js/bootbox.js" type="text/javascript"></script>
<script>
$('.deleteJob').click(function(){
bootbox.confirm("Are you Sure want to delete!", function (x) {
if (x){
var link= $(this).find( $spans ).text();
document.location.href='/'+link+'/';}
});
});
</script>
在一个大的for循环中,但它不起作用!?
答案 0 :(得分:7)
我没有使用bootbox
,但假设函数中的x
值是弹出窗口的布尔结果,这应该有效:
<a href="/jobs/emp/del/?id={{ job.pk }}" class="btn deleteJob">
<i class="icon-trash"></i>
</a>
$('.deleteJob').click(function(e) {
e.preventDefault();
var $link = $(this);
bootbox.confirm("Are you Sure want to delete!", function (confirmation) {
confirmation && document.location.assign($link.attr('href'));
});
});
注意,你提到了一个for
循环 - 那里的jQuery代码不需要在循环中。该代码适用于.deleteJob
锚元素的所有实例。
答案 1 :(得分:3)
您可以使用preventDefault()
停止重定向;
$('.deleteJob').click(function(e) {
e.preventDefault();
if(confirm("Are you Sure want to delete!")) {
var link= $(this).find( $spans ).text();
document.location.href='/'+link+'/';}
}
});
我不确定bootbox
所以这只是jQuery
解决方案
答案 2 :(得分:0)
<script>
$('.deleteJob')each(function(){
var href = $(this).attr("href");
$(this).click(function(){
if(confirm("Are you sure you want to delete this job ?"))
{
document.location.href='/'+href+'/';}
}
});
});
</script>
如果您不介意使用浏览器中的常规确认窗口,这可能会有效。
答案 3 :(得分:0)
如果你在循环之外使用它,它是否有效?问题似乎是你遇到了javascript闭包问题,这基本上意味着循环中分配的函数将在下次执行循环时被覆盖,因此onclick函数只会绑定在最后一个解析为它的DOM上。环。为了解决这个问题,将onclick赋值移动到在循环的每次迭代中调用的外部函数(您可能需要解析。
这个有效的jquery标识符也是?:$ spans
在这里阅读closures。
答案 4 :(得分:0)
如果确认功能的结果为假,则必须阻止默认操作
$(document).ready(function () {
$(".deleteJob").on("click", function (e) {
if (!confirm("Are you Sure want to delete!")) {
e.preventDefault();
}
});
});