gpt4 book ai didi

javascript - 对象属性在事件处理程序中未定义

转载 作者:行者123 更新时间:2023-12-02 18:38:47 25 4
gpt4 key购买 nike

出于某种原因,当我调用generateTabs时,我得到this.divRow1未定义。但是,当我实例化 Criteria 时,它并不是未定义的。

我做错了什么?

function Criteria() {
this.divPortfolio = $("#portfolio_div");
this.divImport = $("#lstimprt_div");
this.rolling = $('#rolling');
this.datePickers = $("#datepickers");
this.dateStart = $("#datepicker");
this.dateEnd = $("#datepicker2");
this.btnToggle = $("#toggle");
this.btnRun = $("#run_report");
this.divRow1 = $("#Row1");
this.dateChoice = $("#datechoice");
this.minDate = $(".minDate");
}

Criteria.prototype.generateToggle = function () {
/** Toggle button toggle elements chosen open/closed **/
button.click(function () {
this.divRow1.toggle("slow");
this.divImport.toggle("slow");
$("#mindate_div").toggle("slow");
$("#header_row").toggle("slow");
return false; //Stops postback
});
};

/** When page loads **/
$(document).ready(function () {
var controls = new Criteria();
var mindate = controls.minDate.html();
controls.onloadHide();
controls.generatePicker(controls.dateStart);
controls.generatePicker(controls.dateEnd);
controls.generateToggle(controls.btnToggle);
});

最佳答案

这是因为回调方法的执行上下文不是Criteria对象,而是点击的按钮。

解决此问题的一种方法是使用 $.proxy() 传递自定义执行上下文

button.click($.proxy(function () {
this.divRow1.toggle("slow");
this.divImport.toggle("slow");
$("#mindate_div").toggle("slow");
$("#header_row").toggle("slow");
return false; //Stops postback
}, this));

另一种解决方案是使用闭包变量

var that = this;
button.click(function () {
that.divRow1.toggle("slow");
that.divImport.toggle("slow");
$("#mindate_div").toggle("slow");
$("#header_row").toggle("slow");
return false; //Stops postback
});

关于javascript - 对象属性在事件处理程序中未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17035986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com