将事件绑定到 Kendo 下拉列表时出现未捕获的类型错误

Uncaught type error when binding Events to Kendo dropdownlist

我尝试为 Kendo 下拉列表上的 select 操作绑定一个事件。我已经把 事件句柄的引号,因为没有额外的引号,事件处理程序出现在 javascript 代码上并给出了错误。

@(Html.Kendo().DropDownList()
.Name("yearDropDown")
.DataTextField("Text")
.DataValueField("Value")
.BindTo(new List<DropDownListItem>() { new DropDownListItem() { Text = "2015", Value = "2015" }, new DropDownListItem() { Text = "2016", Value = "2016" }, new DropDownListItem() { Text = "2017", Value = "2017" }, new DropDownListItem() { Text = "2018", Value = "2018" } })
.Events(e => {
    e.Select("\"drpDwnForecastYearSelect\"");
})
.Value(userInput.year)
.HtmlAttributes(new { style = "width : 8em" })
)

我也在 javascript 中编写了处理程序。但是当我点击下拉菜单中的一个选项时,我在控制台中收到这样的错误

Uncaught TypeError: r[n].call is not a function
    at init.trigger (kendo.all.js:124)
    at init._change (kendo.all.js:32793)
    at Object.<anonymous> (kendo.all.js:32802)
    at i (jquery.min.js:2)
    at Object.add [as done] (jquery.min.js:2)
    at init._click (kendo.all.js:32801)
    at init.d (jquery.min.js:2)
    at init.trigger (kendo.all.js:124)
    at init._click (kendo.all.js:28060)
    at HTMLLIElement.d (jquery.min.js:2)

我面临的问题与 this support ticket 非常相似,但那里没有解决方案,我不能 post 如果不购买高级版。

不要在 select 事件处理程序规范中引入额外的双引号

改变

e.Select("\"drpDwnForecastYearSelect\"");

回到

e.Select("drpDwnForecastYearSelect");

如果您没有定义 global javascript 函数 drpDwnForecastYearSelect 那么浏览器调试控制台将显示

Uncaught ReferenceError: drpDwnForecastYearSelect is not defined
at . . .

正确

将 select 处理程序定义为全局函数。

<script>
    function drpDwnForecastYearSelect(e) {
        console.log(e);
    }
</script>

全局范围可用于 DropDownList 助手呈现的 JavaScript 范围(从 kendo.syncReady() 闭包中调用处理程序).包含处理程序函数的脚本块可以出现在助手之前或之后。

错误

在jQuery文档内定义函数准备好了,比如下面的

    $(function () {
        // Welcome to jQuery document ready 
        function drpDwnForecastYearSelect(e) {
            console.log(e);
        }
    })

将不起作用。 $( document ).ready() 闭包中定义的函数范围不适用于 DropDownList 助手呈现的 kendo.syncReady() 闭包代码的范围。