0

所以我有一个函数可以通过 AJAX 提交内容,然后如果成功与否则显示一个对话框。一切正常,但是我希望选择向该对话框函数传递一个额外的函数(可选),该函数将执行额外的功能。这是我所拥有的:

// 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) 甚至没有测试过它——没有传递一些东西,但我相信它也不会工作。closeFunction 应该是可选的

3)我不能简单地将“焦点”代码行放在 alertDialog 调用之后。即使这有效(在后台获得焦点)。一旦有人在alertDialog上单击“确定”,焦点就会丢失-因此需要在alertDialog关闭时调用。

4

2 回答 2

1

首先,您在问题中提到的任何内容(将函数传递给函数)在 Javascript 编程世界中都称为“回调”函数。

顺便说一句,要回答您的问题,我想您需要绑定关闭对话框时调用的关闭事件回调函数,如下所示:

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

在 closeFunction 中,尝试对所需元素执行 focus()。

试着读这个!更好地了解关闭事件回调的用法。

如果您仍然无法从我的回答中得到正确的解决方案,请发布小提琴或更好地了解您面临的问题!

于 2013-05-30T10:15:57.487 回答
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
    });   
}
于 2013-06-19T07:20:02.377 回答