无法理解domEvent的工作原理

时间:2014-03-06 08:44:39

标签: javascript asp.net telerik

情景:

我有一个RadCombobox,我已将功能附加到大多数事件中。 组合框的一个事件是OnClientBlur,我使用它来检查Combo中的值是否为“未分配”。如果是“未分配”,我需要取消onblur事件并将重点放在同一个组合上。

Dropdown with value Unassigned

这是我用来取消活动的javascript。

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

问题:

当用户第一次选中ComboBox时,事件会被取消并且焦点停留在同一个组合框中(在这种情况下,它是第3个组合)。

但是当用户再次点击标签按钮时,焦点会移动到下一个控件。

当我调试代码时,我发现当用户第一次点击标签按钮时,以下行工作

      eventArgs.get_domEvent().preventDefault();

我可以看到preventDefault函数,请参阅以下快照。 Has function preventDefault

但是当用户再次点击标签按钮时我收到错误并且看不到preventDefault功能,请参阅以下快照

preventDefault not found

我无法理解这里出了什么问题。任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:1)

您的问题,围绕MouseEvents和KeyEvents之间的区别。以及Telerik实施OnClientBlur事件的方式。只要它没有指向特定类型的浏览器事件,每次触发时都会触发

正如您在第一张快照中看到的那样,您获得了clientXclientY,这意味着您的OnClientBlur来自MouseEvent

而在第二个中,您获得了altKeyaltLeft,而且没有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
    }
}