2011-01-04 11 views
20

Estoy utilizando el cuadro de diálogo de la interfaz de usuario de jQuery para el envío de formularios ajax. Quiero cambiar el texto de mi botón de guardar para esperar, cuando el usuario haga clic en él y vuelva a Guardar cuando se complete la llamada ajax. pls ayúdameCambio dinámico del cuadro de diálogo de la interfaz de usuario de jQuery Botón Texto

+3

Si pudiera elegir la mejor respuesta para esta pregunta, sería [esto uno por ManojRK] (http://stackoverflow.com/questions/4591642/dynamically-changing-jquery-ui-dialog-box-button-text#15863018). Bien hecho, Manoj. – gibberish

Respuesta

0

Use $().text('Please Wait') antes de hacer la llamada AJAX y luego agregue $().text('Save') como la última operación en la devolución de llamada exitosa.

Tenga en cuenta que para esto, debe utilizar un elemento de button, no un elemento input:

<button>Text here</button> 
+0

estoy usando los botones de diálogo de jQuery UI. Así que quiero cambiar el texto de esos botones – saokat

+0

¿Y cuál es tu problema? –

+0

El problema es que los botones de diálogo de jQuery no tienen una identificación –

22

Suponiendo que está usando .dialog() con la opción de botones, se puede asignar una clase personalizada para el botón de enviar, y luego apuntar el texto del botón interno a través la clase que se asigna al rango de medición (ui-button-texto):

$("#dialog-test").dialog({ 
     title: "My dialog", 
     buttons: 
      [ 
       { 
        text: "Submit", 
        click: function() { 
        $(".my-custom-button-class > .ui-button-text").text("Please Wait..."); 
        $("#some-form").submit(); 
        }, 
        'class': 'my-custom-button-class' 
       } 
      ] 
    }); 

Cuando su guardado se realiza a través de la presente(), se podría utilizar la misma llamada para establecer el texto de nuevo a lo que desea.

4
$(".ui-dialog-buttonpane button:contains('Save') span").text("Please wait..."); 
7

Si se ayuda a nadie: la plena aplicación de ejemplo (PD: me prestó getDialogButton() de otro post en este sitio, pero no puedo recordar enlace).

//-> Change to Loading Notice: 
setButton('.settingsDialog', 'Save', 'Saving...', false); 
setTimeout(function() { setButton('.settingsDialog', 'Saving...', 'Save', true); }, 800);}, 

//Select the Dialog Buttons 
function getDialogButton(dialog_selector, button_name) { 
    var buttons = $(dialog_selector + ' .ui-dialog-buttonpane button'); 
    for (var i = 0; i < buttons.length; ++i) { 
    var jButton = $(buttons[i]); 
    if (jButton.text() == button_name) 
    { 
     return jButton; 
    } 
    } 
    return null; 
} 


//Button Controller for AJAX Loading: 
function setButton(sDialogClass, sButtonName, sNewButtonName, bEnabled){ 
    var btn = getDialogButton(sDialogClass, sButtonName); 
    btn.find('.ui-button-text').html(sNewButtonName); 

    if (bEnabled) { 
     btn.removeAttr('disabled', 'true'); 
     btn.removeClass('ui-state-disabled'); 
    } else { 
     btn.attr('disabled', 'true'); 
     btn.addClass('ui-state-disabled'); 
    } 
} 
+2

este bit: btn.find ('. Ui-button-text'). Html (sNewButtonName) guardó mi tocino. Pero para obtener el botón, me resultó más fácil obtener la identificación del botón con un selector (puede establecer el id: "myButtonID" en la matriz en la que establece los botones, luego use un selector normal $ ("# myButtonId"). find ('.ui-button-text'). html ("new text") – Gurnard

+0

Perfecto. Exactamente lo que estaba buscando. Debe estar integrado en el diálogo jQueryUI. – dualmon

1
$("#dialog-test").dialog({ 
    title: "My dialog", 
    buttons: 
     [ 
      { 
       text: "Submit", 
       click: function() { 
       $(".my-custom-button-class > .ui-button-text").text("Please Wait..."); 
       //You may use $(this) as selector or allso $("#dialog-test") 
       $(this).parent().children('.ui-dialog-buttonpane').children().children().html('Please wait..'); 
       //As you have only one button, it should not matter to specify child element, but you can like this: 
       //$($(this).parent().children('.ui-dialog-buttonpane').children().children()[0]).html('Please wait..'); 

       $("#some-form").submit(); 
       }, 
       'class': 'my-custom-button-class' 
      } 
     ] 
}); 
20

Aunque la pregunta es muy antiguo que encuentro que la respuesta sea muy simple y no se ha dado aquí.

  • Puede establecer un id para el botón y usarlo.
  • Todos los botones de diálogo son botones jQuery UI, por lo tanto puede usar la función $().button() para modificar el botón.

El código JavaScript es:

$('#dialog').dialog({ 
    buttons:[{ 
     id: 'buttonId', 
     click: function() { 
      // your function 
     }] 
}); 
$('#buttonId').button('option', 'label', 'Please wait...'); 
+5

[Ver también esta respuesta] (http: // stackoverflow. com/questions/10312835/set-jquery-ui-dialog-button-id # 10312946) para una sintaxis más simple (que no sea de matriz). Funciona muy bien en conjunto con esta respuesta. – gibberish

2

Note the correct way para crear varios botones sobre la marcha:

'buttons', [ 
    { 
     text: "Download", 
     click: function() {...} 
    }, 
    { 
     text: "Not now", 
     click: function() {...} 
    } 
] 

Aquí hay un ejemplo usando el estilo no es un array: See this jsFiddle para un ejemplo .

0

Para mi versión de jQuery UI (1.11.4), este formato trabajado para cambiar el texto del botón:

$('#setActionButton').button('option').text('new text'); 

Sin embargo, no se restableció el botón con el nuevo texto en el cuadro de diálogo! Eso fue frustrante La respuesta de JaredBroad anterior es la que funcionó para mí, primero quitando todos los botones del diálogo y luego haciendo clic para encontrar el botón para cambiar el nombre. Luego cambió el texto todo el tiempo.

0

Me parece que si yo uso muchos diálogos con los mismos botones entonces puedo definir la clase a cada botón en cada diálogo y luego cambiar el texto en todos los botones.

$('#dialog1').dialog({ 
     buttons:[{ 
        class: "btnOK", 
        click: function() { 
         ... 
        } 
       }, 
       { 
        class: "btnClose", 
        click: function() { 
         ... 
        } 
       }] 
    }); 

$('#dialog2').dialog({ 
     buttons:[...] 
    });  

$('.btnOK').button('option', 'label', 'Your text here'); 
$('.btnClose').button('option', 'label', 'Your text here'); 

También en lugar de clase puede definir Identificación para cada botón (sin embargo Identificación debe ser único)

Cuestiones relacionadas