JQuery несколько диалогов, чтобы вернуть значение функции, которая его вызывала - PullRequest
1 голос
/ 04 октября 2010

У меня есть приложение со множеством диалогов и я создал функцию для открытия диалога, а также для загрузки в него данных, чтобы другие функции могли открывать диалог и обрабатывать опцию пользователей.

Проблема в том, что когда я вызываю openDialog, он останавливает функцию, вызвавшую его.Я подумал, добавив возвращаемое значение, чтобы при нажатии кнопки вызывающая функция могла обработать ответ пользователя.

function customer_crud(op)
{
var formData = $("#customer_details_form").serialize();
var debugData = formData.replace(/&/g,'<br />');

var text = "<p>Customer Function: " + op + "</p><p>" + debugData + "</p>";
if(openDialog('DEBUG', text)){
    alert("TRUE");
} else {
    alert("FALSE");
}

}

function openDialog(title, text) {

   var dialogOpts = {
    title: title,
    modal: true,
    autoOpen: false,
    buttons: {
              "Delete all items": function() {
                $( this ).dialog( "close" );
                return true;
            },
            Cancel: function() {
                $( this ).dialog( "close" );
                return false
            }
    }

    };

    $("#dialog").dialog(dialogOpts);

    $("#dialog").html(text).dialog('open');

}

Приведенный выше код открывает диалоговое окно, но выдает false, прежде чем что-либо станетвыбран.Если бы кто-то мог помочь мне или предложить лучший способ, я был бы очень рад.

Я планирую передать функцию dialogOpts функции, но поместил ее туда для тестирования.

Спасибо

Ответы [ 3 ]

0 голосов
/ 04 октября 2010

У вас не может быть такого диалогового окна, так как оно не является синхронным / блокирующим, лучше будет вызвать нужный метод при нажатии кнопки диалога, например:

function customer_crud(op)
{
  var formData = $("#customer_details_form").serialize();
  var debugData = formData.replace(/&/g,'<br />');

  var text = "<p>Customer Function: " + op + "</p><p>" + debugData + "</p>";
  openDialog('DEBUG', text);
}

function delete_items() {
  alert("Deleting!");
}

function openDialog(title, text) {
  var dialogOpts = {
    title: title,
    modal: true,
    autoOpen: false,
    buttons: {
      "Delete all items": function() {
        $(this).dialog("close");
        delete_items();
      },
      Cancel: function() {
        $(this).dialog("close");
      }
    }
  };
  $("#dialog").dialog(dialogOpts)
             .html(text).dialog('open');
}
0 голосов
/ 04 октября 2010

У меня есть один диалог, который можно вызвать из нескольких кнопок.Только один шаг в процессе изменяется в зависимости от того, какая кнопка нажата.Результат диалога переходит в другое поле в зависимости от кнопки.Итак, я установил переменную в функции щелчка перед вызовом диалога.Затем в моем диалоге у меня есть оператор switch, который проверяет переменную и добавляет значение в соответствующее поле.Вы также можете использовать оператор switch для выполнения различных функций в зависимости от того, какой диалог вы вызываете.

function openDialog(title, text) {
  var dialogOpts = {
    title: title,
    modal: true,
    autoOpen: false,
    buttons: {
      "Delete all items": function() {
        switch (item_type) {
                                    case "primary":
                                        ...
                                        break;
                                    case "insurance":
                                        ...
                                        break;
                                    case "safety":
                                        ...
                                        break;
                                    case "sales":
                                        ...
                                        break;
                                }
                                $(this).dialog('close');
      },
      Cancel: function() {
        $(this).dialog("close");
      }
    }
  };
  $("#dialog").dialog(dialogOpts)
             .html(text).dialog('open');
}
0 голосов
/ 04 октября 2010

В функции openDialog нет возвращаемого значения. Вот почему вы всегда получите False.

...