'未定义的未定义属性'尝试切换控件的已禁用属性时出错

时间:2016-05-26 12:40:54

标签: javascript

我有一个使用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");
}

当第二行尝试执行时,我收到此错误

  

"无法读取属性' undefined'未定义"

我做错了什么?如果我设置了断点,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窗口中尝试什么,我都无法让它工作:

enter image description here

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

1 个答案:

答案 0 :(得分:0)

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

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的字符串。