2013-05-17 91 views
3

我使用Kendo UI中的多選。 我想知道是否有任何方法來觸發一個函數,當用戶從多選中刪除一個項目。 到目前爲止,我知道'change'事件被觸發了,但它太泛化了,我找不到任何有關用戶刪除的信息。或者在那裏?Kendo multiselect,當物品被移除時觸發事件

回答

5

什麼定義change爲:

change : function (e) { 
    var previous = this._savedOld; 
    var current = this.value(); 
    var diff = []; 
    if (previous) { 
     diff = $(previous).not(current).get(); 
    } 
    this._savedOld = current.slice(0); 
    // diff has the elements removed do whatever you want... 
} 

我要做的就是節省_savedOld以前的值,然後計算與當前使用jQuery.not的差異。重要的是要注意使用slice來克隆先前的值列表,如果我們保存current,那麼我們實際上保存了對當前列表的引用,並且因爲它是下次我們嘗試使用時的參考,我們再次獲取當前值。

編輯:爲了節省初始化時設定的值,你可以這樣做:

dataBound : function (e) { 
    saveCurrent(this); 
}, 
change : function (e) { 
    var previous = this._savedOld; 
    var current = this.value(); 
    var diff = $(previous).not(current).get(); 
    saveCurrent(this); 
    // diff has the elements removed do whatever you want... 
} 

其中saveCurrent是定義爲一個函數:

function saveCurrent(multi) { 
    multi._savedOld = multi.value().slice(0); 
} 
+0

作品,但並非總是如此。有時我初始化多選,並用.values()設置一些值。 那麼,如果我刪除其中的一個,它會觸發「更改」,但之前是未定義的。 – AntouanK

+1

'multiselect.trigger('change');' 似乎是在手動設置值之後執行的技巧...... – AntouanK

+0

另外,在'dataBound'中保存'values'以覆蓋初始化情況。看我的**編輯**。 – OnaBai

相關問題