2011-11-15 11 views
6

Este es mi código document.ready:pasar un valor en un cuadro de diálogo jQuery UI con una función

$(document).ready(function() { 
    $("#dialogbox").dialog({ 
     open: function(event, ui) {$("a.ui-dialog-titlebar-close").remove();}, 
     bgiframe: true,autoOpen: false,closeOnEscape: false,draggable: false, 
     show: "drop",hide: "drop",zIndex: 10000,modal: true, 
     buttons: {'Ok': function() {$(this).dialog("close");processEmp();}} 
    }); 
}); 

Tengo el siguiente código JavaScript que toma un parámetro:

function test(pEmp) 
{ 
    var a = pEmp.value); 

    $('#dialogbox').dialog('open'); 
} 

Mi pregunta es, basado en el valor que paso en mi función de prueba, que a su vez llama a mi jQuery UI diálogo ('#dialogbox'), cuando el usuario presiona el botón 'Aceptar' en el diálogo, necesito de alguna manera (que es lo que No estoy seguro de cómo hacerlo), pase la variable "a" que contiene mi pEmp.value a mi otra función, processEmp (a?), Que He adjuntado a mi botón 'Aceptar'.

Esperando que alguien pueda ayudar, ya que básicamente necesito este valor cuando el usuario reconoce el cuadro de diálogo.

Gracias.

Respuesta

6

Puede pasar opción personalizada para diálogo antes de abrirlo:

$(function() { 
    $("#dialog").dialog({ 
      open: function (event, ui) { $("a.ui-dialog-titlebar-close").remove(); }, 
      bgiframe: true, 
      autoOpen: false, 
      closeOnEscape: false, 
      draggable: false, 
      show: "drop", 
      hide: "drop", 
      zIndex: 10000, 
      modal: true, 
      buttons: { 'Ok': function() { 
       $(this).dialog("close"); 
       processEmp($(this).data("pEmpValue")); 
      } 
      } 
    }); 
}); 

function processEmp(a) { 
    alert(a); 
} 

function test(pEmp) { 
    $("#dialog").data("pEmpValue", pEmp.value).dialog("open"); 
} 

O incluso la solución más simple es declarar a variable en el alcance de la ventana:

var a = null; 

$(function() { 
    $("#dialog").dialog({ 
      open: function (event, ui) { $("a.ui-dialog-titlebar-close").remove(); }, 
      bgiframe: true, 
      autoOpen: false, 
      closeOnEscape: false, 
      draggable: false, 
      show: "drop", 
      hide: "drop", 
      zIndex: 10000, 
      modal: true, 
      buttons: { 'Ok': function() { 
       $(this).dialog("close"); 
       processEmp(a); 
      } 
      } 
    }); 
}); 

function processEmp(a) { 
    alert(a); 
} 

function test(pEmp) { 
    a = pEmp.value; 
    $("#dialog").dialog("open"); 
} 
+1

Esto parece un comportamiento no compatible y sería reacio a confiar en él. Los documentos dicen que el método de opción es para pasar una 'opción de diálogo', lo que tomo como una de las opciones definidas. – BNL

+0

@BNL, usted tiene un punto. En esta pregunta, se sugirió usar el método .data() en lugar de la opción personalizada: http://forum.jquery.com/topic/using-custom-options-in-jquery-ui-dialog –

4

Puede lograr esto agregando un controlador de eventos para 'cerrar'. Algo como esto:

$("#dialogbox").bind("dialogclose", function(event, ui) { processEmp(a); }); 
+0

También se puede especificar en las opciones originales por 'cerrar' (al igual que el límite OP 'abierto'). – BNL

+0

Apreciar tu ayuda @Dmitry pero no estoy seguro de cómo enganchar esto con mi código anterior. ¿Todavía conservo mi botón 'Aceptar' en mi cuadro de diálogo? – tonyf

+0

Sí, debe mantener el controlador 'Ok' para cerrar el diálogo. Cuando se cierra el cuadro de diálogo, el evento 'dialogclose' se activará. –

Cuestiones relacionadas