我爲我正在編寫的項目編寫了jQuery的快速自定義擴展。我很難在我想實現的自定義onChange方法中理解'this'的範圍。如果在我調用web服務的代碼中間留下了一些內容,但是如果您檢出最後兩種方法,則會看到我的問題在哪裏。我想用選定的值更改調用updateDetails方法。但是,在onchange事件中調用該方法時,顯然會丟失「this」的範圍,因爲this.materialListResponse在此上下文中未定義。任何幫助我幫助我理解這一點將不勝感激。在jQuery on change事件中瞭解'this'的作用域
$.fn.appendMaterials = function (options) {
this.options = options;
//Set Default Options
this.defaults = {
typeID: '66E1320D-51F9-4900-BE84-6D5B571F9B80'
};
this.options = $.extend({}, this.defaults, options);
//
Code here to call web service and generate response XML
//
this.materialListResponse = $.xml2json(
$.parseXML($(this.materialListWebservice()).find("GetMaterialTreeResponse").text())).Materials.Material;
this.appendOptionString = function() {
var i = 0;
this.optionString = '<option>'
for (i = 0; i < this.materialListResponse.length; i++) {
this.optionString += '<option>' + this.materialListResponse[i].MaterialCode + '</option>';
};
this.append(this.optionString);
return this;
};
this.appendOptionString();
this.updateDetails = function() {
for (i = 0; i < this.materialListResponse.length; i++) {
if (this.materialListResponse[i].MaterialCode === this.val()) {
$('#table1 #MaterialDescription').val(this.materialListResponse[i].Description);
}
}
}
this.change(this.updateDetails)
};
太棒了!工作完美!非常感謝! –
您應該在事件處理程序中聲明'that'變量,否則它將是全局的。 – Guffa
@Guffa:嗯。沒有發現這一點。刪除我的答案。 –