2010-10-31 188 views
1

對Javcascript沒有太多的知識,除了用於某些Dynamic HTML。現在我冒險了一點Ajax地面,並與下面的代碼有問題(借用從 http://kpumuk.info/php/ajax-enabled-smarty-plugins-part-2-ajax_form/和編輯,以適應我的需要)。Javascript prototype.js:如何將參數傳遞給回調函數

如何將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(){}」語法。那是什麼?這是否需要,因爲它創建了一個對象的方法?一個指針簡單的解釋將不勝感激。

非常感謝!

回答

1

你需要自己從匿名包裝調用函數(除非你要修改的原型來源,我強烈建議你避免的),像這樣:

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); 
} 
+0

@bolero - 不要用上面的*替換你的'onSubmit',它只是一個例子,表明不管你用'onSubmit'(無論是回調還是基礎'onSubmit'),現在都會得到第二個論據。例如你可以在'onSubmit'函數簽名中添加第二個參數並在裏面使用它,但是當前的代碼仍然需要運行來更新元素。 – 2010-10-31 13:02:42

+0

@bolero - 我還看到一個額外的'x'在那裏滑動,可能會拋出一個錯誤:'var complete = callback || this.onSubmitx;'應該是'var complete = callback || this.onSmitmit;' – 2010-10-31 13:03:23

+0

我不明白我如何發佈評論的方式與我發佈原始問題的方式相同?例如體面的代碼格式。我怎麼做? 當我把你的代碼傳遞給我的代碼時,它運行了一點,變量不會以某種方式傳遞。我想發佈代碼,但comnment字段只是提交未格式化的垃圾,所以我刪除了我的評論。 – bolero 2010-10-31 13:08:01

2

你就不能這樣做:

onComplete: callback || this.onSubmit.bind(this, update_id) 
相關問題