Javascript preventDefault()被window.location否决

Javascript preventDefault()被window.location否决,javascript,jquery,window,href,preventdefault,Javascript,Jquery,Window,Href,Preventdefault,我在我的网站上有一个包含几个步骤的过程。要导航,我有“上一个”和“下一个”按钮。这些按钮是带有href属性的元素(访问上一步和下一步) “下一步”按钮用作进入下一步的门,但也用于在继续之前验证当前步骤中的某些字段 这就是单击“下一步”按钮时发生的情况: href值保存在变量$url中 preventDefault()阻止链接打开URL 进行了一些验证检查 如果返回“true”,则将在window.location中加载$url 对于某些步骤,我需要使用确认框再次检查用户。但问题来了: 问题: $

我在我的网站上有一个包含几个步骤的过程。要导航,我有“上一个”和“下一个”按钮。这些按钮是带有href属性的
元素(访问上一步和下一步)

“下一步”按钮用作进入下一步的门,但也用于在继续之前验证当前步骤中的某些字段

这就是单击“下一步”按钮时发生的情况:

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

    问题:

    $('#next_link').click(function(e) {
        var url = $(this).attr('href');
        e.preventDefault();             
        if(wiz_validate_required() && wiz_is_step_done()) {
            window.location = url;  
        } 
    }); 
    
    $('.dimensions-check').click(function(e) {
        if(confirm('Have you specified the dimensions in millimeters?') == false) {
            e.preventDefault();
        }
    });
    
    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;  
        } 
    }); 
    
    $('.dimensions-check').click(function(e) {
        if(confirm('Have you specified the dimensions in millimeters?') == false) {
            e.preventDefault();
        }
    });
    
    2。确认框功能:

    $('#next_link').click(function(e) {
        var url = $(this).attr('href');
        e.preventDefault();             
        if(wiz_validate_required() && wiz_is_step_done()) {
            window.location = url;  
        } 
    }); 
    
    $('.dimensions-check').click(function(e) {
        if(confirm('Have you specified the dimensions in millimeters?') == false) {
            e.preventDefault();
        }
    });
    

    尺寸检查在哪里进行

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

    $(“#下一个链接”)。单击(函数(e){
    var url=$(this.attr('href');
    e、 预防默认值();
    如果(wiz_validate_required()&wiz_is_step_done()){
    //如果尺寸标注不提示{
    //windows.location
    //}否则调用维度提示
    } 
    
    });我会这样做。如果您对代码有任何疑问,请询问

    //如果需要或不需要确认,可以为每个步骤更改这些设置
    var需要确认=真;
    var cb_message='是否已指定尺寸单位为毫米?';
    $(“#下一个链接”)。单击(函数(e){
    var url=$(this.attr('href');
    e、 预防默认值();
    如果(需要确认===true){
    如果(确认框(cb\U消息)==真){
    重定向窗口(url);
    }
    }否则{
    重定向窗口(url);
    }
    });
    功能确认对话框(cb\U消息){
    如果(确认(cb_消息)==真){
    返回true;
    }否则{
    返回false;
    }
    }
    函数重定向窗口(url){
    如果(wiz_validate_required()&wiz_is_step_done()){
    window.location=url;
    }
    }
    
    
    
    什么是尺寸检查?这个链接和下一个链接是否在某个地方共存?也许您应该创建一个使用确认框并返回true或false的函数,然后处理click事件,但您需要共享更多代码以获得直接答案!如果需要进行第二次检查,是否可以在步骤1中使用if语句不设置
    $url
    ?例如,
    如果(!secondCheckRequired){//set$url}
    @idoteque dimensions check和next_link确实存在,并且在同一个按钮上是和ID和class。这就是问题所在。我需要将这两个函数分开,否则就没有问题了,我把所有的东西都放在一个函数中。没有更多的代码可以共享,因为只有这两个函数相互冲突。顺便说一句,wiz_validate_required()和wiz_is_step_done()函数没有给出问题,我已经检查过了。我认为你不必再次从JS重新定向。不要调用event.preventDefault(),应该停止调用。只需检查一下,我想您可能有另一个事件分配给该锚,因此您的
    默认设置不起作用
    。如果您有
    $('a.mya')。on('click'..
    $('a')。on('click'..
    两个事件都将被触发。如果是这种情况,您必须注销事件。