2012-08-31 23 views
9

Estoy tratando de utilizar Twitter bootstrap modal en lugar de diálogo de confirmación personalizada.Uso de Twitter bootstrap modal en lugar de confirmar el cuadro de diálogo

mi función

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> 

llamar a la función

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

el problema es la función getConfirm no devuelve verdadero o falso.


CÓDIGO DE TRABAJO:

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

pieza de código después de las modificaciones & cambios/no funciona

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

finaly que decidió utilizar bootboxjs

Respuesta

22

Su el enfoque es incorrecto, se ejecutará de forma asincrónica, por lo que no esperará a que el cuadro de diálogo modal se cierre antes de volver. Pruebe algo como esto:

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... 
}); 

Sin embargo, tenga en cuenta que solo necesita inicializar el modal una vez y enlazar los eventos una vez. Daría el cuerpo modal y la identificación y simplemente cambiaría el contenido antes de mostrarlo.

También debe establecer el fondo como verdadero, desea una confirmación para evitar que el usuario acceda a la página hasta que confirme.

+0

funciona bien pero mi función no está esperando la función getConfirm. – Ayhan

+0

Solución increíble. ¡Gracias! – Houman

+6

Buena solución, pero funcionará de forma inconsistente después de varias invocaciones, ya que las devoluciones de llamada asignadas a los botones no se eliminan, y todas se evaluarán después de N llamadas. Algo como seguir será suficiente si no tiene otros eventos adjuntos: '$ ('# confirmFalse'). Off(). Haga clic en (function() {' –

Cuestiones relacionadas