2017-10-09 90 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