изменить диалоговое окно jquery - PullRequest
2 голосов
/ 17 августа 2010

У меня проблема с повторным использованием диалогового окна, поэтому мне не нужно дублировать код. У меня проблема, когда я нажимаю кнопку «Добавить новый», у меня есть кнопки «Сохранить» и «Отмена». Кнопка сохранения в диалоговом окне позволяет сохранить информацию. Если я нажму кнопку «Изменить существующую», чтобы отредактировать информацию, я бы хотел, чтобы кнопка «Сохранить» сменилась на кнопку «Редактировать». Возможно ли это?

Ответы [ 2 ]

1 голос
/ 17 августа 2010

Я думаю, что вы пытаетесь во время выполнения изменить текст кнопок в зависимости от действий пользователя. Это обсуждение с участием Ричарда Ворса может помочь, и это то, что мне пришлось использовать для достижения того, что вы пытаетесь сделать.

По сути, то, что вы пытаетесь сделать, невозможно, определив массив кнопок как литерал объекта (встроенный в определение диалога). Что вы должны сделать, это определить массив кнопок вне инициализации диалога; ваши индексы массива могут быть вашим текстом метки (как вы увидите в примере обсуждения сообщения). Затем, когда вы инициализируете массив, вы просто назначаете свойству кнопок свой массив кнопок.

В псевдокоде вы сделаете это:

function createDialog(mode) {  //mode=new for dayClick; edit for eventClick
  var myButtons = {};  //initialize the object to hold my buttons
  if (mode === "new") {
    myButtons["Save"] = function() {...}  //the function that does the save
  } else {
    myButtons["Edit"] = function() {...}  //the function that edits
  }
  myButtons["Cancel"] = function() {...} //common cancel function for either new or edit mode

  //other logic

  $("#dialogAddEdit").dialog({
    ...
    buttons: myButtons,  //assign the buttons property to your myButtons array object
    ...
  });
}

Надеюсь, это поможет !!

0 голосов
/ 14 мая 2017

Существует еще одно простое решение , чтобы сделать это:

Просто создайте свое диалоговое окно, как обычно, присвойте двум (или более) кнопкам «ключевое слово» (здесь «open_key» и"cancel_key"), затем, сразу после инициализации , установите текст этих элементов HTML, используя небольшую хитрость jQuery : contains () .

Sampleкод ниже (pp_loca - это моя функция для получения локализованной строки, но pp_loca не может использоваться в опции "buttons {...}" ...

 $( "#dialog_open_from_server" ).dialog({
    resizable: false,
    height: "auto",
    width: 600,
    modal: true,
    buttons: {
        "open_key": function() {
            $( this ).dialog( "close" );
        },
        "cancel_key": function() {
            $( this ).dialog( "close" );
        }
    }
});
$('.ui-button:contains("open_key")').html(pp_loca('ITF_26'));
$('.ui-button:contains("cancel_key")').html(pp_loca('ITF_27'));
...