提前谢谢大家。这是我第一次开发一个jQuery插件(并且第一次在javascript中开发实际上也是如此),我不得不说我非常了不起(它可能对你经验丰富的js / jquery开发人员有很多可怕的事情,但这是我的第一次尝试 - 请忍受我:)。我欢迎对任何代码提出任何建设性的批评。
这是一个模型框插件(是的,还有其他工作要求,但工作要求规定我自己编码以避免第三方依赖)显示给定的文本,来自ajax调用的文本或给定/取自的表单ajax调用,然后通过ajax处理表单提交。这需要尽可能自定义,所以我试图提供一些钩子(?? - 匿名函数),用户可以使用它来将自定义代码传递给插件。
我遇到的问题是为用户功能提供参数。如果我使用关键字'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();
}
答案 0 :(得分:5)
请参阅call
syntax。第一个参数确定回调函数本身内部的this
。 not 作为参数传递给回调函数。
要将参数传递给回调,请使用call
的其余参数:
settings.onFormSuccess.call(thisArg, msg, dataArray);
然后回调将接收两个参数,并在this
指向thisArg
的情况下运行:
function successHandler(msg, dataArray) {}
您的代码的另一个问题是 成功处理程序中this
的值是没有意义的。从它看起来它只会指向window
对象。因此,您调用的回调也将与this == window
一起运行。