2014-03-06 78 views
1

場景:無法理解的domEvent如何工作

我有一個radcombobox控件和我附加功能,大部分的事件。 組合框的一個事件是OnClientBlur,我正在使用它來檢查Combo中的值是否爲「Unassigned」。如果它是「未分配」,我需要取消onblur事件並將注意力集中在同一個組合上。

Dropdown with value Unassigned

這是我一直用來取消該事件的JavaScript。

if (sender.get_text() === "Unassigned") { 
     eventArgs.get_domEvent().preventDefault(); 
     return false; 
} 

問題:

當用戶切換到該組合框的事件被取消的第一時間和焦點停留在同一個組合框(在這種情況下,第三組合)。

但是,當用戶再次點擊標籤按鈕焦點移動到下一個控件。

當我調試的代碼,我發現,當用戶第一次打標籤按鈕,下面一行工程

 eventArgs.get_domEvent().preventDefault(); 

我能看到的preventDefault功能,請參閱以下快照。 Has function preventDefault

但是當用戶再次點擊該選項卡按鈕,我得到一個錯誤,並不能看到的preventDefault功能,請參閱以下快照

preventDefault not found

我無法理解到底是怎麼回事錯在這裏。任何幫助,將不勝感激。

回答

1

你的問題圍繞着MouseEvents和KeyEvents之間的區別。還有Telerik執行OnClientBlur事件的方式。至於它並不指向特定類型的瀏覽器的事件,每次它被觸發

正如你在你有clientXclientY第一個快照,這意味着你的OnClientBlurMouseEvent衍生見。

鑑於在第二個你得到altKey,altLeft,也沒有button屬性,這意味着這是一個KeyEvent

這裏的另一點是,你必須在輸出這些領域:

e.bookmarks 
e.behaviorPart 
e.behaviorCookie 

意味着你使用的是舊版本的IE4 +到IE7或IE8,他們有cancelBubble而不是preventDefault之一。

有時事件不是cancelable,並且使用event.cancelable您可以確定當前事件是否爲cancelable

在年底前解決你的代碼,你可以簡單地這樣做:

if (sender.get_text() === "Unassigned") { 
    var domEvent = eventArgs.get_domEvent(); 
    if(domEvent.cancelable){ 
     if(typeof(domEvent.preventDefault)==="function") 
      domEvent.preventDefault(); 
     else 
      domEvent.cancelBubble = true; 
     return false; 
    } 
    else{ 
     //you can not cancel the event, do something else to make it manageable 
    } 
} 
+0

感謝詳細的職位。我面臨着一個問題。我將'domEvent.cancelable'命名爲undefiend,所以definetly我不能取消事件,在這種情況下,我應該關注一些控制,然後重新注意組合?因爲我不想讓用戶前進,直到他選擇一個合適的值。 – Nilesh

相關問題