Javascript prototype.js:如何将参数传递给回调函数

时间:2010-10-31 12:30:31

标签: javascript ajax smarty

除了将Javcascript用于某些动态HTML之外,对它的了解还不多。现在我冒险进入Ajax领域并遇到以下代码的问题(借用 http://kpumuk.info/php/ajax-enabled-smarty-plugins-part-2-ajax_form/并根据我的需要进行编辑。

如何将update_id参数传递给obSubmit函数?

var SmartyAjax = {

     submit: function(form, update_id, params, callback)
     {
       var myAjax = new Ajax.Request(
       form.action,
       {
         method: form.method,
         parameters: Form.serialize(form.id),
         onComplete: callback || this.onSubmit
       });
     },

     onSubmit: function(originalRequest)
     {
       var results = originalRequest.responseText;
       this.target = $("target2");
       this.target.innerHTML = results;
     }

}

我想将update_id传递给onSubmit函数,以便我可以将其指定为目标。根据Prototype文档,它会自动将Ajax.Response对象作为第一个参数传递。所以,这就是originalRequest所引用的内容。我也没有看到将update_id传递给该函数的方法。我该怎么做?

在相关的说明中:我第一次看到这个“name:function(){}”语法。那是什么?这是否需要,因为它创建了对象的方法?指向简单解释的指针将不胜感激。

非常感谢!

2 个答案:

答案 0 :(得分:2)

你需要自己从匿名包装器中调用该函数(除非你想修改Prototype源代码,我强烈建议你避免使用它),如下所示:

 submit: function(form, update_id, params, callback)
 {
   var complete = callback || this.onSubmit;
   var myAjax = new Ajax.Request(
   form.action,
   {
     method: form.method,
     parameters: Form.serialize(form.id),
     onComplete: function(req) { complete.call(this, req, update_id); }
   });
 },

现在你的处理程序将有第二个参数,传递给这个函数的update_id参数,例如你可以这样做:

onSubmit: function(originalRequest, update_id) {
  alert(update_id);
}

答案 1 :(得分:2)

你不能这样做:

onComplete: callback || this.onSubmit.bind(this, update_id)