2012-08-31 80 views
9

我正在尝试使用twitter引导模式而不是自定义确认对话框。使用Twitter引导模式而不是确认对话框

我的功能

function getConfirm(confirmMessage){ 
    if (confirmMessage == undefined){ 
     confirmMessage = ''; 
    } 
    $('#confirmbox').modal({ 
    show:true, 
     backdrop:false, 
     keyboard: false, 
    }); 

    $('#confirmMessage').html(confirmMessage); 
    $('#confirmFalse').click(function(){ 
     $('#confirmbox').modal('hide'); 
     return false; 
    }); 
    $('#confirmTrue').click(function(){ 
     $('#confirmbox').modal('hide'); 
     return true; 
    }); 
} 
</script> 
<div class="modal" id="confirmbox" style="display: none"> 
    <div class="modal-body"> 
     <p id="confirmMessage">Any confirmation message?</p> 
    </div> 
    <div class="modal-footer"> 
     <button class="btn" id="confirmFalse">Cancel</button> 
     <button class="btn btn-primary" id="confirmTrue">OK</button> 
    </div> 
</div> 

调用函数

var confimChange=getConfirm("Do You confirm?"); 
if(confimChange){ 
    alert('perfect you confirmed') 
}else{ 
    alert('why didnt you confirmed??') 
} 

问题是getConfirm功能不返回true或false。


工作代码:修改后

if(receiverListCount > 0){ 
    var confimChange=confirm("Message"); 
    if(confimChange){ 
     resetReceiverList(); 
    }else{ 
     return false; 
    } 
} 

一段代码&更改/不工作

if(activeDiv == '#upload'){ 
    if(listOfSelectedGroups.length> 0|| receiverListCount > 0){ 
     getConfirm("message",function(result){ 
      if(result){ 
       resetReceiverList(); 
      }else{ 
       return false; 
      } 
     }); 
    } 
} 

finaly我决定用bootboxjs

回答

22

你方法是错误的,它会异步执行一种方式,以便在返回之前不会等待模态对话框关闭。尝试是这样的:

function getConfirm(confirmMessage,callback){ 
    confirmMessage = confirmMessage || ''; 

    $('#confirmbox').modal({show:true, 
          backdrop:false, 
          keyboard: false, 
    }); 

    $('#confirmMessage').html(confirmMessage); 
    $('#confirmFalse').click(function(){ 
     $('#confirmbox').modal('hide'); 
     if (callback) callback(false); 

    }); 
    $('#confirmTrue').click(function(){ 
     $('#confirmbox').modal('hide'); 
     if (callback) callback(true); 
    }); 
} 

getConfirm('Are you sure?',function(result) { 
    // Do something with result... 
}); 

不过请注意,你真正需要的只是一次初始化模式和挂钩的事件一次。我会给模式的身体和身份证,并简单地更改显示之前的内容。

您还应该将背景设置为true,您需要进行确认以防止用户在确认之前访问该页面。

+0

它工作正常,但我的功能并不等待getConfirm函数。 – Ayhan

+0

令人惊叹的解决方案。谢谢! – Houman

+6

好的解决方案,但会在多次调用后不一致地工作,因为分配给按钮的回调没有被移除,并且它们都将在N次调用后被评估。如果你没有附加其他事件,那么下面的东西就足够了:'$('#confirmFalse')。off()。click(function(){' –