我正在编写一些jquery来处理我的KendoUI Widgets for MVC提供的值。我一直在关注他们自己的文档,但我遇到的问题是小部件返回undefined
。我看到的第一个地方就是他们的故障排除,他们要求你说出所有脚本的顺序正确,并且没有重复的jQuery引用。我已经做到了这一点,但仍然遇到问题。
小部件作为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(){ ... });
,该函数可以正常工作,但它不是我希望它存在的地方。因此,为了测试,我将文档中的窗口小部件定义为全局变量,如下所示:
$(function(){
//I missed out var to define a global scope
estDeparture = $("#estDept").data("kendoDateTimePicker");
console.log(estDeparture.value());
});
当我从我的函数访问上面的全局变量时,我得到了相同的未定义错误,就像它无法将它传递给静态函数一样。
我在这里做错了什么,以及为什么定义的小部件一直被返回为未定义?
答案 0 :(得分:0)
我并不熟悉Telerik的Kendo库,但听起来您的元素可能无法在刷新时重新注册DOM。我在更新部分视图之前遇到过这个问题(我假设它与Kendo元素类似)。问题是,当部分视图最初呈现时,所有DOM元素都会被注册,因此它们存在于相应的事件中。但是,在部分视图刷新之后,局部视图中的所有元素都是" new"并且不再在DOM事件中注册。我克服这个问题的方法是使用"文档"来编写我的jquery函数。对象(而不是特定的dom对象)。
部分观点:
<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 强>