2011-01-04 16 views
20

Używam okna dialogowego jQuery UI do przesyłania formularza ajax. Chcę zmienić tekst przycisku zapisu , aby czekać, gdy użytkownik kliknie na nim iz powrotem do Zapisz po zakończeniu wywołania ajax. pls Pomóż miDynamiczne zmienianie okna dialogowego interfejsu jQuery Przycisk Tekst

+3

Gdybym mógł wybrać najlepszą odpowiedź na to pytanie, to będzie [ten jeden przez ManojRK] (http://stackoverflow.com/questions/4591642/dynamically-changing-jquery-ui-dialog-box-button-text#15863018). Dobra robota, Manoj. – gibberish

Odpowiedz

0

Użyj $().text('Please Wait') przed wykonaniem połączenia AJAX, a następnie dodaj $().text('Save') jako ostatnią operację w powrocie połączenia.

Należy pamiętać, że do tego, należy użyć elementu button, a nie elementem input:

<button>Text here</button> 
+0

Używam przycisków dialogowych jQuery UI. Więc chcesz zmienić tekst tych przycisków. – saokat

+0

A twój problem? –

+0

Problem polega na tym, że przyciski dialogowe jQuery nie mają identyfikatora –

22

Zakładając, że używasz .dialog() z opcją przycisków można przypisać klasę niestandardową do przycisku Prześlij, a następnie kierować się wewnętrzną tekstu za pomocą przycisku klasa, który jest przypisany do rozpiętości (UI-button-text):

$("#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' 
       } 
      ] 
    }); 

Gdy Zapisz uzupełnia poprzez submit(), można użyć tego samego połączenia, aby ustawić tekst z powrotem do tego, co chcesz.

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

Jeśli to pomoże ktoś: pełne wdrożenie z przykładu (PS: Pożyczyłem getDialogButton() z innym poście na tej stronie, ale nie pamiętam linku).

//-> 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

ten bit: btn.find (".ui-button-text"). Html (sNewButtonName) zapisał mój boczek. Ale aby uzyskać przycisk, łatwiej było uzyskać identyfikator przycisku za pomocą selektora (możesz ustawić id: "myButtonID" w tablicy, w której ustawiasz przyciski, a następnie użyć normalnego selektora $ ("# myButtonId"). znajdź (".ui-button-text"). html ("nowy tekst") – Gurnard

+0

Idealny Dokładnie to, czego szukałem Powinien być wbudowany w okno dialogowe 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

Choć pytanie jest bardzo stary znajdę odpowiedź jest bardzo prosta i nie została podana tutaj.

  • Możesz ustawić identyfikator przycisku i użyć go.
  • Wszystkie przyciski dialogowe są przyciskami jQuery UI, dlatego można użyć funkcji $().button() do modyfikacji przycisku.

Kod JavaScript jest:

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

[Zobacz także tę odpowiedź] (http: // stackoverflow. com/questions/10312835/set-jquery-ui-dialog-button-id # 10312946) dla prostszej składni (nie tablicy). Działa wspaniale w połączeniu z tą odpowiedzią. – gibberish

2

Note the correct way tworzenie wielu przycisków w locie:

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

Oto przykład przy użyciu stylu non-tablicy: See this jsFiddle na przykład .

0

Dla mojej wersji jQuery UI (1.11.4), format ten pracował zmienić przycisk tekst:

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

Jednak nie zresetować przycisk z nowym tekstem w oknie! To było frustrujące. JaredBroad Odpowiedź powyżej to ta, która zadziałała przede mną, najpierw wyciągając wszystkie przyciski z okna dialogowego, a następnie przełączając się, aby znaleźć przycisk do zmiany nazwy. Potem za każdym razem zmieniał tekst.

0

Uważam, że jeśli korzystam z wielu okien dialogowych za pomocą tych samych przycisków, mogę zdefiniować klasę dla każdego przycisku w każdym oknie dialogowym, a następnie zmienić tekst na wszystkich przyciskach.

$('#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'); 

Również zamiast klasy można zdefiniować id dla każdego przycisku (jednak id powinien być unikalny)

Powiązane problemy