preventDefault()被window.location覆盖

我在我的网站上有几个步骤。 要导航,我有“上一个”和“下一个”按钮。 这些按钮是<a>具有href属性的元素(用于访问上一步和下一步)。

下一个按钮可用作下一步的入口,但也可以在当前步骤中验证一些字段,然后继续。

所以这是点击下一个按钮时发生的情况:

  • href值保存在变量$url
  • preventDefault()阻止链接打开URL。
  • 有一些验证检查完成。
  • 如果它们返回“true”, $url将被加载到window.location中。
  • 对于某些步骤,我需要用确认框对用户进行另一次检查。 但问题来了:

    问题:

    confirm()返回“false”时,用户不应该进入下一页。 但函数1的window.location现在“否决了”函数2的preventDefault()

    1.默认的下一个按钮功能:

    $('#next_link').click(function(e) {
        var url = $(this).attr('href');
        e.preventDefault();             
        if(wiz_validate_required() && wiz_is_step_done()) {
            window.location = url;  
        } 
    }); 
    

    2.确认框功能:

    $('.dimensions-check').click(function(e) {
        if(confirm('Have you specified the dimensions in millimeters?') == false) {
            e.preventDefault();
        }
    });
    

    我会做那样的事情。 如果您对代码有任何疑问,请询问!

    小提琴

        // These can be changed for each step if you want or not a confirmation 
       var needs_confirm = true;
       var cb_message = 'Have you specified the dimensions in millimeters?';
    
       $('#next_link').click(function(e) {
    
         var url = $(this).attr('href');
         e.preventDefault();
    
         if (needs_confirm === true) {
           if (confirm_box(cb_message) === true) {
             redirect_window(url);
           }
         } else {
           redirect_window(url);
         }
    
       });
    
    
       function confirm_box(cb_message) {
         if (confirm(cb_message) === true) {
           return true;
         } else {
           return false;
         }
       }
    
       function redirect_window(url) {
         if (wiz_validate_required() && wiz_is_step_done()) {
           window.location = url;
         }
       }
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <div id="next_link"><a href="#">link</a>
    </div>
    

    你在哪里叫维度检查?

    e.preventDefault()仅取消提交表单的按钮的默认操作。 无论e.preventDefault如何,windows.location将始终将您重定向。

    $('#next_link').click(function(e) {
        var url = $(this).attr('href');
        e.preventDefault();             
        if(wiz_validate_required() && wiz_is_step_done()) {
            //If dimension isnot prompt{
              //windows.location
            //}else call dimension prompt
                
        } 
    });
    链接地址: http://www.djcxy.com/p/12425.html

    上一篇: preventDefault() overruled by window.location

    下一篇: window.location not evaluating until entire call stack is processed?