2017-10-09 48 views
0

我正在写一些jquery来处理我的KendoUI Widgets for MVC提供的值。我一直在关注他们自己的文档,但是我遇到的问题返回为undefined。我查看的第一个地方是他们的故障排除,他们要求你将所有的脚本按照正确的顺序进行配置,并且没有重复的jQuery引用。我已经这样做了,但仍然遇到问题。为什么我的KendoUI Widget被返回为undefined?

作为undefined返回的小部件的问题似乎仅限于剑道日期/时间选择器。

这里是使用Razor视图在HTML中定义的小部件。

@(Html.Kendo().DateTimePicker() 
    .Name("estDept") 
    .Value(DateTime.Now)) 

我有一个函数,当页面加载时,还有一个特定的按钮被按下时运行。来获取值的代码如下:

function voyageTime() { 
    var estDeparture = $("#estDept").data("kendoDateTimePicker"); 
    console.log(estDeparture.value()); 
}; 

当你第一次加载页面,此代码工作正常,但你应该刷新你会得到一个错误,指出estDeparture is undefined。我尝试将代码添加到文档就绪功能$(function(){ ... });,该功能可以工作,但它不是我想要它生活的地方。因此,为了测试我的文档定义的widget准备就绪像这样的全局变量:

$(function(){ 
    //I missed out var to define a global scope 
    estDeparture = $("#estDept").data("kendoDateTimePicker"); 
    console.log(estDeparture.value()); 
}); 

当我从我的函数访问上面的全局变量我得到同样的未定义的错误,喜欢的话可以不把它传递给一个静态函数。

我在这里做了什么错误,为什么定义的小部件总是返回undefined?

回答

0

我并不特别熟悉Telerik的Kendo库,但它听起来像是你的元素可能没有在刷新时被重新注册到DOM上。我之前有过更新部分视图(我认为它类似于Kendo元素)的问题。问题是,当部分视图最初呈现时,所有的DOM元素都会被注册,因此它们存在于相应的事件中。但是,在部分视图刷新后,部分视图中的所有元素都是“新”,并且不再注册DOM事件。我克服这个问题的方法是使用“文档”对象(而不是特定的dom对象)编写我的jquery函数。

局部视图:

<div id="reloadedWidget"> 
    <input id="reloadedElement" type="text" /> 
</div> 

例如:
我写这样的事情(作品局部刷新后):

<script> 
$(document).on('change', '#reloadedElement', function(){ 
    var estDeparture = $(this).data("kendoDateTimePicker"); 
    console.log(estDeparture.value()); 
}); 
</script> 

不用编写(休息部分刷新后):

<script> 
$('#reloadedElement').onChange(function() 
{ 
    var estDeparture = $(this).data("kendoDateTimePicker"); 
    console.log(estDeparture.value()); 
}); 
</script> 

Click here for example code

相关问题