【问题标题】:Javascript prototype.js: How to pass parameter to callback functionJavascript原型.js:如何将参数传递给回调函数
【发布时间】:2011-05-03 01:29:12
【问题描述】:

除了将它用于一些动态 HTML 之外,没有太多关于 Javcascript 的知识。现在我正在冒险进入 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 函数,以便我可以将其指定为目标。根据原型文档,它自动获取作为第一个参数传递的 Ajax.Response 对象。所以,这就是 originalRequest 引用的内容。我也看不到将 update_id 传递给该函数的方法。我该怎么做?

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

非常感谢!

【问题讨论】:

    标签: javascript ajax smarty


    【解决方案1】:

    您需要自己从匿名包装器中调用该函数(除非您想修改 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);
    }
    

    【讨论】:

    • @bolero - 不要替换您的onSubmit 上面的内容,这只是一个示例,表明您对onSubmit 使用的任何内容(无论是回调还是base onSubmit) 现在将获得第二个参数。例如,您可以在 onSubmit 函数签名上添加第二个参数并在其中使用它……但其中的当前代码仍需要运行以更新元素。
    • @bolero - 我还看到一个额外的x 滑入其中,可能会引发错误:var complete = callback || this.onSubmitx; 应该是var complete = callback || this.onSubmit;
    • 我不明白如何以与发布原始问题相同的方式发布 cmets?例如具有良好的代码格式。我怎么做?当我将您的代码转移到我的代码中时,它会运行一点,变量不会以某种方式传递。我想发布代码,但是评论字段只是提交未格式化的垃圾,所以我删除了我的 cmets。
    • @bolero - 您可以使用反引号(波浪号键)进行 一些 格式设置,但仅此而已。
    • 调用的函数是onSubmitx。我只是复制了原始函数并将其重命名,以便将原始函数保留在其中。
    【解决方案2】:

    你不能这样做:

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

    【讨论】:

      猜你喜欢
      • 2011-03-28
      • 2011-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-02
      • 2013-02-07
      • 1970-01-01
      相关资源
      最近更新 更多