2012-02-05 5 views
0

Я хотел бы добавить 2 аргумента в функцию диалогового окна. Первый аргумент должен быть для заголовка поля, а второй - для содержимого коробки. Я бы хотел вызвать эту функцию и установить заголовок и содержимое коробки на лету.Как написать функцию?

Вот что я хотел бы функцию, чтобы охватить:

var $dialog = $('<div></div>') 
.html('This dialog will show every time!') 
.dialog({ 
    height : 140, 
    modal : true, 
    autoOpen : false, 
    title : 'Basic Dialog' 
}); 

Это в настоящее время открывает диалоговое окно.

$dialog.dialog('open'); 

ответ

3

Вот ваша функция:

function createDialog(title, content) 
{ 
    return $('<div></div>') 
     .html(content || 'Defualt content.') 
     .dialog({ 
      height : 140, 
      modal : true, 
      autoOpen : false, 
      title : title || 'Defualt title' 
     }); 
} 

Вы можете вызвать функцию следующим образом:

$dialog = createDialog('Basic Dialog', 'This dialog will show every time!'); 

, а затем открыть его с $dialog.dialog('open'), как у вас есть, или вы можете открыть его сразу:

createDialog('Basic Dialog', 'This dialog will show every time!').dialog('open'); 

Как указано в @LordZardeck, вышеупомянутое решение приведет к слишком большому количеству нечетких узлов DOM. Вам лучше использовать один и тот же диалог (можно ли предположить, что вам понадобится только один диалог сразу? Надеюсь, что так!).

Если вы хотите сохранить ваш DOM немного разумнее, попробуйте следующее:

var createDialog = (function($) 
{ 
    var $dialog = $('<div></div>').dialog({ 
      height : 140, 
      modal : true, 
      autoOpen : false 
     }), 
     $content = $dialog.find('.dialog-content'); 

    return function (title, content) 
    { 
     $content.html(content || 'Default content.'); 

     return $dialog.dialog('option', { 
        title : title || 'Defualt title' 
       }); 
    } 
}) 
(jQuery); 

Использование такой же, как с выше.

+1

Спасибо! Примите это после (в настоящее время) 6 минут ожидания. – Muzz

+0

Должен сказать, это действительно гениальное решение! Реквизит! И если вы не возражаете, я буду модифицировать свой код, чтобы использовать его! – LordZardeck

3

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

function showMessage(m, t) 
{ 
    t = (t)? t : 'Application Message'; 
    return $('<div>').css({'text-align': 'left', 'padding-top': '10px'}).html(m).dialog({ 
      modal: true, 
      width: '400px', 
      height: 140, 
      title: t, 
      autoOpen: false, 
      close: function(){$(this).dialog('destroy');}, 
      buttons: { Ok: function() { $(this).dialog("close"); } } 
    }); 
}; 
+0

Спасибо LordZardeck. В духе справедливости. Сначала ответил Джозеф Зильбер, но я все равно хотел поблагодарить вас. Я проголосовал за ваш ответ, потому что использовал вашу функцию уничтожения. :) – Muzz

+1

+1 для учета многочисленных элементов DOM, которые могут быть созданы. Однако зачем вам создавать и уничтожать диалог снова и снова? Почему бы просто не использовать один и тот же диалог? –

+0

true. в то время как это, вероятно, не повлияет на производительность, мы всегда должны стремиться улучшить наш код. вот проблема, однако, как мы можем определить глобальную переменную, чтобы назначить ее и гарантировать, что она не будет мешать другому коду? – LordZardeck

Смежные вопросы