Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    jquery: conferma modale (dialog modal), attendere click su OK o Cancella

    Salve ragazzi,
    stavolta tocca a me chiedere
    In poche parole, ho dei vecchi script fatti da un altro programmatore dove spesso ho questo genere di funzione
    codice:
    if( confirm("Sei sicuro di voler eliminare i contatti?") ){
    	dati = $('#contatti-checked-form').serialize();
    	elimina_contatti(dati);
    } else {
    	deseleziona_contatti();
    }
    Ovviamente appare un normale popup di conferma e se si clicca su ok, esegue le operazioni relative.
    Ora la domanda. Siccome non voglio andare in ogni script e sostituire il confirm("testo") con una dialog modale di jquery, ho fatto questa funzioncina banale
    codice:
    function confirm(testo){
    	$( '#loading-layer' ).html(testo);
    	$( '#loading-layer' ).dialog({
    		resizable: false,
    		draggable: false,
    		height: 'auto',
    		minHeight: 55,
    		modal: true,
    		title: 'Conferma',
    		buttons: {
    		"OK": function() {
    			$( this ).dialog( "close" );
    			return true;
    		},
    		Cancel: function() {
    			$( this ).dialog( "close" );
    			return false;
    		}
    		}
    	});
    }
    che non fa altro che un override della funzione javascript confirm. Il problema è però che non resta in attesa, cioè appare a video la finestrella jquery tutta bella formattata con il richiamo grafico del sito, ma facendo debug vedo che il primo script non attende la risposta dal nuovo confirm, in pratica assume "false" sempre, e quindi esegue
    codice:
    	deseleziona_contatti();
    Ho cercato un po' in giro ma non ho trovato risposta. Come posso fare per far sì che la mia funzione iniziale resti in attesa della risposta dalla finestrella modale jquery ed esegua quindi o la cancellazione o la deselezione in base a che pulsante premo?

    Grazie a tutti, saluti

  2. #2
    Non puoi. La confirm originale, come anche gli alert è bloccante, ovvero blocca l'esecuzione del codice fino a che uno dei pulsanti non viene premuto. Nel tuo caso devi usare delle callback, che significa andare a cambiare in ogni posto dove hai confirm.
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  3. #3
    Originariamente inviato da mxa
    Non puoi. La confirm originale, come anche gli alert è bloccante, ovvero blocca l'esecuzione del codice fino a che uno dei pulsanti non viene premuto. Nel tuo caso devi usare delle callback, che significa andare a cambiare in ogni posto dove hai confirm.
    Ciao mxa,
    grazie della conferma. Purtroppo temevo fosse così.
    Visto che di jquery non sono espertissimo (qualcosa so fare ma a volte mi trovo in difficoltà), come dovrei fare? Cioè...come dovrebbe diventare questa funzione?
    codice:
    if( confirm("Sei sicuro di voler eliminare i contatti?") ){
    	do_qualcosa
    } else {
    	do_qualcosaltro
    }
    Non mi serve che me la riscrivi, basta la sintassi, poi smanetto un po' da me

    Grazie comunque, a buon rendere

  4. #4
    codice:
    function confirm(testo, okFn, koFn){
    	$( '#loading-layer' ).html(testo);
    	$( '#loading-layer' ).dialog({
    		resizable: false,
    		draggable: false,
    		height: 'auto',
    		minHeight: 55,
    		modal: true,
    		title: 'Conferma',
    		buttons: {
    		"OK": function() {
    			$( this ).dialog( "close" );
                            $.isFunction(okFn) && okFn();
    		},
    		Cancel: function() {
    			$( this ).dialog( "close" );
    			$.isFunction(koFn) && koFn();
    		}
    		}
    	});
    }
    
    
    
    
    confirm("Sei sicuro di voler eliminare i contatti?", function(){
     //do_qualcosa
    }, function(){
     //do_qualcosaltro
    });
    ma a questo punto visto che devi cambiare tutto comunque non sovrascriverei la funzione confirm nativa e chiamerei la tua con un altro nome.
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.