【问题标题】:I want to redirect to link on <a> only after confimation?我只想在确认后重定向到 <a> 上的链接?
【发布时间】:2013-06-24 19:19:04
【问题描述】:

我遇到了问题,我正在苦苦挣扎。我想在确认后重定向到链接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 循环中,但它不起作用!?

【问题讨论】:

    标签: jquery html django loops


    【解决方案1】:

    如果确认函数的结果为假,您必须阻止默认操作

    $(document).ready(function () {
        $(".deleteJob").on("click", function (e) {
            if (!confirm("Are you Sure want to delete!")) {
                e.preventDefault();
            }
        });
    });
    

    【讨论】:

      【解决方案2】:

      如果您在循环之外使用它,它是否有效?这个问题看起来像你遇到了 javascript 闭包问题,这基本上意味着在循环中分配的函数将在下次执行循环时被覆盖,因此函数 onclick 将仅绑定在最后一个解析到它的 DOM 上环形。为了解决这个问题,将 onclick 分配移动到在循环的每次迭代中调用的外部函数(您可能需要解析。

      这也是有效的 jquery 标识符吗?:$spans

      在此处了解closures

      【讨论】:

        【解决方案3】:
        <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>
        

        如果您不介意使用浏览器中的正常确认窗口,也许这可以工作。

        【讨论】:

          【解决方案4】:

          我没有使用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 锚元素的所有实例。

          【讨论】:

          • 这是一个更新的fiddle,展示了我的工作示例。
          • 感谢这项工作。我花了两个多小时。现在我得到了它。谢谢
          • @suhail 没问题,很高兴为您提供帮助 :)
          【解决方案5】:

          您可以使用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 唯一的解决方案

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-06-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-12-07
            相关资源
            最近更新 更多