Si desidera modificare la configurazione della finestra di dialogo al clic (in questo caso, il comportamento del pulsante Ok). Per questo hai molte soluzioni tutte brutte (imo). Vorrei consigli generare una finestra di dialogo al volo, e distruggendo una volta che è stato utilizzato, qualcosa di simile:
$("#delete").click(function(ev) {
ev.preventDefault(); // preventDefault should suffice, no return false
var href = $(this).attr("href");
var dialog = $("<div>Are you sure?</div>");
$(dialog).dialog({
resizable: false,
autoOpen: true,
modal: true,
buttons: {
'OK': function() {
window.location = href;
$(this).dialog("close");
},
'Cancel': function() {
$(this).dialog("close");
}
},
close: {
$(this).remove();
}
});
});
O, meglio ancora, incapsulare la finestra di dialogo di conferma in una funzione in modo da poter riutilizzare, in questo modo :
function confirmDialog(msg) {
var dialog = $("<div>"+msg+"</div>");
var def = $.Deferred();
$(dialog).dialog({
resizable: false,
autoOpen: true,
modal: true,
buttons: {
'OK': function() {
def.resolve();
$(this).dialog("close");
},
'Cancel': function() {
def.reject();
$(this).dialog("close");
}
},
close: {
$(this).remove();
}
});
return def.promise();
}
e quindi utilizzarlo in questo modo
confirmDialog("are your sure?").done(function() {
window.location = $(this).attr("href");
}).fail(function() {
// cry a little
});
potrebbe essere necessario verificare se l'oggetto differita è stata respinta o risolti prima di chiudere la finestra di dialogo, per garantire la conferma r espelle da vicino (e non solo premendo il pulsante 'Annulla'). Questo può essere fatto con un condizionale def.state() === "in attesa".
Per ulteriori informazioni su jquery differita: http://api.jquery.com/category/deferred-object/
vicino: {$ (this) .Remove();} restituisce un errore – Vlado