2013-05-30 2 views
0

Итак, у меня есть функция, которая передает данные через AJAX, а затем отображает диалоговое окно, если оно было успешным или нет. Все работает нормально, но затем я хочу, чтобы опция передачи этой функции диалога выполняла дополнительную функцию (необязательно), которая будет выполнять дополнительные функции. Вот что у меня есть:JQuery: Передача функции функции, которая не требуется

// the work 
if (data._response.success == 'true') { 
    $("#suppliers_grid").trigger("reloadGrid"); 
    $('#manage-suppliers-form').fullFormReset(); 
    alertDialog('Supplier '+ action +' successfully!','Success',$('#manage-suppliers-form :input:visible:first').focus()); 
} else { 
    alertDialog('Supplier was not '+ action +' successfully!<br />Please try again or report this to the administrator.','Error','ui-state-error'); 
} 

// the alertDialog function 
function alertDialog(message,title,cssClass,closeFunction) { 
    title = typeof title !== 'undefined' ? title : 'Notice'; 
    cssClass = typeof cssClass !== 'undefined' ? cssClass : 'ui-state-highlight'; 
    if (cssClass=='ui-state-error') { 
    icon = 'ui-icon-alert'; 
    } 
    else { 
    icon = 'ui-icon-info'; 
    } 

    var dialog = $('<div><p><span class="ui-icon '+ icon +'"></span>'+ message +'</p></div>'); 
    dialog.dialog({ 
     modal: true, 
     title: title, 
     buttons: { 
     Ok: function() { $(this).dialog("close"); } 
     }, 
     close: closeFunction() 
    }); 
} 

1) выше не работает, если я прохожу closeFunction

2) даже не тестировал -without- передавая ей что-то, но я уверен, это тоже не сработает. closeFunction должно быть ДОПОЛНИТЕЛЬНО

3) Я не могу просто поместить строку «focus» кода после вызова alertDialog. Даже при том, что это работает (фокусируется в фоновом режиме). Как только кто-то нажимает «ok» на alertDialog, фокус теряется - поэтому его нужно вызвать при закрытии alertDialog.

ответ

1

Прежде всего, что вы упомянули в своем вопросе ( Передача функции к функции) называется функцией «обратного вызова» в программировании мира Javascript.

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

var that = this; 
    dialog.dialog({ 
     close: function(event, ui) { 
      if(closeFunction && typeof closeFunction === 'function') { 
       closeFunction.call(that); 
      } 
    }}); 

Внутри closeFunction, попытайтесь сделать фокус () для требуемого элемента.

Try to read this!, чтобы лучше понять использование обратного вызова события закрытия.

Если вы все еще не получите правильное решение из моего ответа, пожалуйста, напишите скрипку или дайте лучшее понимание проблемы вашей стороны!

+0

Спасибо, что не работал - но я использовал некоторые из того, что вы упомянули, и прошел, и объект «$ („# управление-поставщик-форма: вход: видимая: первый“)» вместо функции «$ ('# manage-Supplices-form: input: visible: first'). focus()", а затем просто вызвал фокус на объект в закрытой части диалога. Не такой мощный, как возможность передать функцию, но для чего мне это нужно в этот самый момент - достаточно. – SupaMonkey

0

Попробуйте

// the work 
if (data._response.success == 'true') { 
    $("#suppliers_grid").trigger("reloadGrid"); 
    $('#manage-suppliers-form').fullFormReset(); 
    //Pass the function as the fourth parameter and create a annonymous function to set the focus 
    alertDialog('Supplier '+ action +' successfully!', 'Success', '', function(){ 
     $('#manage-suppliers-form :input:visible:first').focus(); 
    }); 
} else { 
    alertDialog('Supplier was not '+ action +' successfully!<br />Please try again or report this to the administrator.','Error','ui-state-error'); 
} 

// the alertDialog function 
function alertDialog(message,title,cssClass,closeFunction) { 
    title = typeof title !== 'undefined' ? title : 'Notice'; 
    cssClass = typeof cssClass !== 'undefined' ? cssClass : 'ui-state-highlight'; 
    if (cssClass=='ui-state-error') { 
     icon = 'ui-icon-alert'; 
    } 
    else { 
     icon = 'ui-icon-info'; 
    } 

    var dialog = $('<div><p><span class="ui-icon '+ icon +'"></span>'+ message +'</p></div>'); 
    dialog.dialog({ 
     modal: true, 
     title: title, 
     buttons: { 
      Ok: function() { $(this).dialog("close"); } 
     }, 
     close: closeFunction //assign the function reference instead of the return value of the function 
    }); 
} 
Смежные вопросы