jQuery插件开发 – 将参数传递给用户定义的回调函数

提前谢谢大家。 这是我第一次开发一个jQuery插件(并且第一次在javascript中实际开发),我不得不说我非常痴迷(对于经验丰富的js / jquery开发人员来说,它可能有许多可怕的东西,但这是我的第一次尝试 – 请忍受我:)。 我也欢迎对任何代码提出任何建设性的批评。

这是一个模型框插件(是的,有其他工作要求,但工作要求规定我自己编码以避免第三方依赖)显示给定的文本,来自ajax调用的文本或从ajax调用给出/获取的表单然后通过ajax处理表单提交。 这需要尽可能自定义,所以我试图提供一些钩子(?? – 匿名函数),用户可以使用它来将自定义代码传递给插件。

我遇到的问题是为用户function提供参数。 如果我使用关键字’this’,我可以传递’msg’变量,用户函数可以使用它。 但是当我传递’msg’而不是’this’时,用户会得到一个空白变量。 我想传递的不仅仅是msg – 在ajax调用中传递的数据数组和模型框的jQuery对象也是我真正想做的事情。

下面是代码片段 – 该函数位于插件内部并在其中调用; 我只是将一些代码分组到用于组织/开发目的的函数中。

// Submits the form inside of the model box // and calls the user hooks of onFormSuccess and // onFormFailure for ajax success and error function submitForm() { var URL = $('form',$contentNode).attr('action'), method = $('form',$contentNode).attr('method'), data = $('form',$contentNode).formSerialize(); $.ajax({ url: URL, type: method, data: data, success: function(msg) { // Doesn't work, but I would like it too //settings.onFormSuccess.call(msg, breakData(data) ); // Does work settings.onFormSuccess.call(this); }, error: function (XMLHttpRequest, textStatus, errorThrown) { setings.onFormFailure.call(errorThrown); } }); closeModel(); } 

请参阅call语法 。 第一个参数确定回调函数本身的内容。 它作为参数传递给回调函数。

要将参数传递给回调,请使用其余的call参数:

 settings.onFormSuccess.call(thisArg, msg, dataArray); 

然后回调将接收两个参数,并this指向thisArg运行:

 function successHandler(msg, dataArray) {} 

您的代码的另一个问题是成功处理程序中的this值是没有意义的。 从它看起来它只会指向window对象。 所以你调用的回调也将在this == window运行。