【问题标题】:'undefined property of undefined' error while trying to toggle control's disabled property尝试切换控件的禁用属性时出现“未定义的未定义属性”错误
【发布时间】:2025-12-15 05:50:01
【问题描述】:

我有一个使用 Razor 视图和 Kendo UI Web 控件的 C# Web 应用程序。在我的表单上,我有一个 DropDownList 定义如下:

@(Html.Kendo().DropDownListFor(m => m.MentalStatus).HtmlAttributes(new { id = "cmbMentalStatus", @class = "k-dropdown-width-30", @tabIndex = "1", style = "width:60px", onchange = "OnChangeC0100(cmbMentalStatus);" }).BindTo(ViewBag.ZeroToOne).OptionLabel(" "))

onchange 属性指的是这个 JS 方法:

function OnChangeC0100(cmb)
{
    var stupidJS = document.getElementById("cmbV14_Adm_C0200_RepetitionThreeWords_Tab6");

    stupidJS.disabled = (cmb.options[cmb.selectedIndex].value == "0");
}

当第二行尝试执行时,我得到了这个错误

“无法读取未定义的属性‘未定义’”

我做错了什么?如果我设置断点,cmb 不是nullstupidJS 不是 null

根据this linkdisabled 是要设置的属性。这不准确吗?

编辑:我看过这些问题:

How to Get Dropdown's Selected Item's text in Kendo UI?

how to get selected value for Kendo DropDownList

http://www.telerik.com/forums/dropdownlist-getting-clientside-value-on-selected-item-in-mvc

以及此处的文档; http://demos.telerik.com/kendo-ui/dropdownlist/api

但是无论我在 Watch 窗口中尝试什么,我都无法让它工作:

第一个是最接近的;至少它返回一个值,但它不是正确的。我选择了文本和值都为“1”的项目,但它给出了一个空字符串。屏幕截图中没有显示,但$("#cmb").kendoDropDownList().val() 给出了undefined。为什么如果我硬编码对控件的引用,它有点工作,但作为参数传递给方法的对象却不起作用?

【问题讨论】:

  • "cmb 不是null",但它是什么?该错误表明它可能与此有关,而不是 stupidJS.disabled - 它正在读取一个属性,并且它正在报告它正在尝试读取的属性名称 (cmb.selectedIndex) 和它正在尝试读取的对象的 undefined它在 (cmb.options) 上,表明 cmb 没有这些属性中的任何一个。它看起来应该是你的<select>,但你需要调试它以确保它是你认为的那样。
  • @JamesThorpe cmb 是我在文章开头的 razor sn-p 中创建的控件。从this SO post 这就是我确定这就是您访问下拉列表的选定项目的方式

标签: javascript


【解决方案1】:

我能够找到解决我的实际任务的方法:

function OnChangeC0100(cmb)
{
    var cmbVal = $("#" + cmb.id).val();
    var enabled = (cmbVal != "0");

    $("#cmbSomeControl").kendoDropDownList({ enable: enabled });
    $("#cmbSomeOtherControl").kendoDropDownList({ enable: enabled });

    if (cmbVal == "0")
        document.getElementById("cmbV14_Adm_C900A_MemoryRecall_Season_Tab6").focus();
}

我修改了我的 kendo DropDownList 以将 this 传递给方法,而不是包含 ID 的字符串。

【讨论】:

    最近更新 更多