网站搜索

javascript - 在 TypeScript 中 Select 没有 options 属性


我在循环 TypeScript 数组时遇到问题。这些方法是:

getNotification(evt: string, rowIndex: number) {
    console.log("Production order: law has changed to " + evt + " " + rowIndex);
    var select = document.getElementsByName("ProductId-" + rowIndex);

    this.removeOptions(select);

    if ((evt != null) && (evt != "")) {
        let productsByLaw: IProduct[];

        productsByLaw = this.products.filter(x => x.lawId == +evt);
        for (let product in productsByLaw) {
            select.options[select.options.length] = new Option(product.name, product.productid);
        }
    }

}

removeOptions(selectbox : any) {
    var i;
    for (i = selectbox.options.length - 1; i >= 0; i--) {
        selectbox.remove(i);
    }
}

我不确定 var select=document.getElementsByName("ProductId-" + rowIndex); 是否是获取 HTML select 的正确方式,因为当我执行 select.options[select.options.length] 时,我得到了这个编译时错误:

错误 TS2339 (TS) 类型 'NodeListOf' 上不存在属性 'options'。

我如何用 TypeScript 获取一个 select?

答案#1

在相关行中尝试这些更改。

//line 3
var select = (document.getElementsByName("ProductId-" + rowIndex)[0]);

removeOptions(selectbox : any) {
    var i;
    for (i = selectbox.length - 1; i >= 0; i--) {
        selectbox.remove(i);
    }
}')[0];

答案#2

这是我让它工作的方式:使用 HTMLSelectElement。

getNotification(evt: string, rowIndex: number) {
    let id: string = "ProductId-" + rowIndex;

    let select: HTMLSelectElement = <HTMLSelectElement>document.getElementById(id);

    this.removeOptions(select);

    if ((evt != null) && (evt != "")) {
        let productsByLaw: IProduct[];

        productsByLaw = this.products.filter(x => x.lawId == +evt);
        for (let product of productsByLaw) {
            select.options[select.options.length] = new Option(product.name, product.productId.toString());
        }
    }
}