2009-08-17 40 views
1

谢谢大家提前。这是我第一次开发一个jQuery插件(并且实际上第一次使用JavaScript进行开发),并且我不得不说我非常喜欢(可能有很多可怕的东西给你经验丰富的js/jquery开发人员,但这是我的第一次尝试 - 请忍受我:)。我也欢迎任何代码的任何建设性的批评。jQuery插件开发 - 将参数传递给用户定义的回调函数

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

我遇到的问题是向用户功能提供参数。如果我使用关键字'this',我可以很好地传递'msg'变量,并且用户函数可以使用它。但是,当我通过'味精'而不是'这个'用户得到一个空白变量。我想要传递的不仅仅是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

tl dr;你能提供一个更简短的例子吗? – Greg 2009-08-17 14:29:53

+0

刚刚做到了,对此表示遗憾 – 2009-08-17 14:31:26

回答

5

查看call syntax。第一个参数决定什么this将在回调函数本身内。它是而不是作为参数传递给回调函数。

将参数传递给您使用的call其余参数回调:

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

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

function successHandler(msg, dataArray) {} 

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