我无法从函数访问某些变量。这是我得到的:
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?
答案 0 :(得分:1)
更改
$('input[data-widget-type="date"]').each(this.dateValidation)
到
$('input[data-widget-type="date"]').each(function(index, element) {
this.dateValidation(element);
}.bind(this));
然后更改PTP.prototype.dateValidation = function(callback) {
发送至PTP.prototype.dateValidation = function(element) {
现在,在dateValidation中,this
是您的PTP对象,element
是每个循环中的jquery元素