【发布时间】:2018-07-20 00:23:42
【问题描述】:
我无法从函数中访问某些变量。这是我得到的:
var PTP = function (properties) {
this.errorsArray = []
}
PTP.prototype.initHTMLItems = function () {
$('input[data-widget-type="date"]').each(this.dateValidation)
}
PTP.prototype.dateValidation = function() {
var field = '#' + $(this)[0].id
var that = this
$(field).focusout(function(){
var valid = form_validate_date($(field).val())
var label = $('#date').siblings('label').children('.label-text').text()
if (!valid) {
that.errorsArray.push({
'field': field,
'fieldType': 'date',
'errorMessage': 'Incorrect data' + (label !== undefined ? ' for ' + label : "")
})
}
})
}
问题是我无法访问errorsArray。
我还尝试将回调函数作为参数传递给 dateValidation:
PTP.prototype.addError = function(errorObj) {
this.errorsArray.push(errorObj)
}
试过这样:
PTP.prototype.initHTMLItems = function () {
$('input[data-widget-type="date"]').each(this.dateValidation(this.addError))
}
也是这样:
PTP.prototype.initHTMLItems = function () {
$('input[data-widget-type="date"]').each(this.dateValidation.bind(this.addError))
}
但这与 dateValidation 中 this 的范围有关:
PTP.prototype.dateValidation = function(callback) {
var field = '#' + $(this)[0].id
var that = this
$(field).focusout(function(){
var valid = form_validate_date($(field).val())
var label = $('#date').siblings('label').children('.label-text').text()
if (!valid) {
callback({
'field': field,
'fieldType': 'date',
'errorMessage': 'Incorrect data' + (label !== undefined ? ' for ' + label : "")
})
}
})
}
如何访问 errorsArray?
【问题讨论】:
标签: javascript jquery scope prototype