2014-09-21 9 views
1

Как бы вы переопределили функциональность по умолчанию jQuery UI, чтобы каждый раз, когда я устанавливал новый заголовок для диалога, он добавляет перед ним xxx? Таким образом, $("#any_dialog_id").dialog("option", "title", "yyy") установил бы название xxxyyy.Задача заголовка диалогового окна jQuery

$().ready(function(){ 

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

    $(".ui-dialog-title").before("xxx"); 

    // I add the line // 
    $("#any_dialog_id").dialog("option", "title", "yyy"); 

}); 

Но он показывает yyyxxx не xxxyyy

Что я должен сделать, чтобы заставить его работать ??

Спасибо ...

+0

'всякий раз, когда я устанавливаю новый заголовок' ... почему вы не можете конкатенировать новый текст заголовка? – charlietfl

+0

Я должен написать именно эту строку $ ("# any_dialog_id"). Dialog ("option", "title", "yyy"); – Ases12

+0

И результат должен быть «xxxyyy» – Ases12

ответ

0

Есть много способов, которыми вы могли бы это сделать. Самое простое - запустить свою линию $(".ui-dialog-title").before("xxx");ПОСЛЕ каждый звонок для открытия диалога. Вы не можете просто запустить его один раз и ожидать повторного запуска при последующих диалоговых вызовах.

Другой способ сделать это - изменить код jquery. Но я ВЫСОКО не рекомендую это делать.

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

Вот пример того, что вы могли бы сделать, и я включил jsfiddle ссылку, а также (http://jsfiddle.net/stdw6j5q/1/):

HTML:

<div id="idDiv_MyDialog">Hi 1!</div> 
<div id="idDiv_MyDialog2">Hi 2!</div> 
<div id="idDiv_MyDialog3">Hi 3!</div> 
<div id="idDiv_MyDialog4">Hi 4!</div> 

JAVASCRIPT:

jDialog = function(options) { 
    // THE WRAPPER TAKES TWO EXTRA OPTIONS TO IDENTIFY THE DIALOG AND THE TITLE PREFIX TO USE 
    // I SET A DEFAULT SELECTOR IF NOTHING IS PASSED IN 
    var _dialog = options && options.dialog ? options.dialog : '#idDiv_MyDialog'; 
    // HERE YOU CAN SET A DEFAULT PREFIX 
    var _titlePrefix = options && options.titlePrefix ? options.titlePrefix : 'XYZ: '; 
    // UPDATE THE TITLE OPTION 
    options.title = _titlePrefix + options.title; 
    // PASS THROUGH ALL YOUR NORMAL OPTIONS TO THE DIALOG 
    $(_dialog).dialog(options); 
    // THIS RETURNS A HANDLE/REFERENCE TO THE DIALOG CREATED 
    return $(_dialog); 
} 

$(function() { 

    // CALL YOUR WRAPPER WHEN YOU NEED TO CREATE/MOD THE DIALOG 
    $myDialog1 = jDialog({ 
     title: 'Hey Jude', 
     close: function(event, ui) { $myDialog2.dialog('open'); } 
    }); 
    $myDialog2 = jDialog({ 
     dialog: '#idDiv_MyDialog2', 
     title: 'Don\'t let me down', 
     autoOpen: false, 
     close: function(event, ui) { $myDialog3.dialog('open'); } 
    }); 
    $myDialog3 = jDialog({ 
     dialog: '#idDiv_MyDialog3', 
     title: 'Take a sad song', 
     autoOpen: false, 
     close: function(event, ui) { $myDialog4dialog('open'); } 
    }); 
    $myDialog4 = jDialog({ 
     dialog: '#idDiv_MyDialog4', 
     title: 'And make it better', 
     autoOpen: false 
    }); 
}); 
+0

Это работает, но задача состоит в том, чтобы иметь в строке код: $ («# any_dialog_id»). («Option», «title», «yyy») и писать эту строку, это должен быть результат «xxxyyy». – Ases12

+0

Как я уже говорил, вам нужно будет запустить строку 'before' после редактирования КАЖДОГО диалога. ИЛИ вы можете изменить CORE LIBRARY jQuery (плагин диалога), который является невероятно плохим идеей .... если вы не добавите это в качестве дополнительной функции в группу с открытым исходным кодом jquery plugin, что, я уверен, не будет восприниматься всерьез. – williambq

+0

Вы можете предпочесть решение @Scimonster. Для простоты это определенно просто. Но оболочка позволит вам также иметь возможность НЕ включать префикс или РАЗЛИЧНЫЙ префикс, если вам нужно. – williambq

0

Вы можете задайте событие для запуска всякий раз, когда создается диалог, который добавляет заголовок.

$(document).on('dialogcreate', function(){ // let it bubble up 
    $(".ui-dialog-title", this).before("xxx"); // add "xxx" before the title of this dialog 
}); 
+0

Да, вы могли бы сделать это на каждой странице, чтобы любой созданный диалог затем запустил это сообщение ... не плохое решение. – williambq

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