首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在浏览器中返回“不是函数”的类型记录函数

在浏览器中返回“不是函数”的类型记录函数
EN

Stack Overflow用户
提问于 2021-01-08 17:47:42
回答 1查看 172关注 0票数 0

我对打字很陌生,所以请容忍我.

在我的ASP.NET MVC .NET 5应用程序中,我有以下ASP.NET文件(为了简洁起见略有编辑):

代码语言:javascript
运行
复制
interface IMyFeature {
    setupEventHandlers: () => void;
    handleDurationSelectorChange: () => void;
    fetchReportData: (durationId: number) => void;
}

class MyFeatureCode implements IMyFeature {
    constructor() {
        this.setupEventHandlers();
        this.fetchReportData(0);
    }

    setupEventHandlers(): void {
        $('#durationSelector').change(this.handleDurationSelectorChange);
    }

    handleDurationSelectorChange(): void {
        const durationId: number = Number($(this).find('option:selected').attr("id"));
        this.fetchReportData(durationId);
    }

    fetchReportData(durationId: number): void {
        const url: string = $('#formData').data().the_url;

        $.ajax({
                type: 'GET',
                url: url,
            data: { "reportFor": durationId }
            })
            .done((data: any) => {
                if (data.success === false) {
                    // Panic?
                }
                else {
                    // do something
                }
            })
            .fail((xhr: any, status: any, error: any) => {
                // log something
            })
            .always(() => {
            });
    }
}

const myFeature: IMyFeature = new MyFeatureCode();

简单地总结一下它的作用..。

  1. 当页面加载时,它调用值为零的函数fetchReportData来加载初始数据;当用户更改页面上的组合框/下拉时,调用相同的函数,但这一次传递所选的数字。

什么起作用

当页面加载时,“this.fetchReportData(0);”将被成功执行。

什么不起作用

当用户更改下拉列表时,我们在变量durationId中得到正确的数字,但是行this.fetchReportData(durationId);会导致以下错误:

HTMLSelectElement.MyFeatureCode.handleDurationSelectorChange (dailyStandup.ts:24) at HTMLSelectElement.dispatch (jquery.min.js:2) at HTMLSelectElement.v.handle (jquery.min.js:2)

那么,为什么构造函数能够将它看作一个函数,而我的事件处理程序函数却不能呢?

另一件事(更令人烦恼)。在Visual中,IDE突出显示接口和类中的“函数”名称,并表示它们是“重复标识符”。有办法阻止吗?它似乎不会影响它的构建/执行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-08 17:54:40

插入有关javascript和this关键字的相关模因

我相信您可以通过以下两种方法之一修复此错误:

  • 绑定如下:

代码语言:javascript
运行
复制
setupEventHandlers(): void { 
 $('#durationSelector').change(this.handleDurationSelectorChange.bind(this));
}

  • 使用箭头函数

代码语言:javascript
运行
复制
setupEventHandlers(): void { 
 $('#durationSelector').change(ev => this.handleDurationSelectorChange(ev));
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65633919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档