情景:
我有一个RadCombobox,我已将功能附加到大多数事件中。 组合框的一个事件是OnClientBlur,我使用它来检查Combo中的值是否为“未分配”。如果是“未分配”,我需要取消onblur事件并将重点放在同一个组合上。
这是我用来取消活动的javascript。
if (sender.get_text() === "Unassigned") {
eventArgs.get_domEvent().preventDefault();
return false;
}
问题:
当用户第一次选中ComboBox时,事件会被取消并且焦点停留在同一个组合框中(在这种情况下,它是第3个组合)。
但是当用户再次点击标签按钮时,焦点会移动到下一个控件。
当我调试代码时,我发现当用户第一次点击标签按钮时,以下行工作
eventArgs.get_domEvent().preventDefault();
我可以看到preventDefault函数,请参阅以下快照。
但是当用户再次点击标签按钮时我收到错误并且看不到preventDefault功能,请参阅以下快照
我无法理解这里出了什么问题。任何帮助,将不胜感激。
答案 0 :(得分:1)
您的问题,围绕MouseEvents和KeyEvents之间的区别。以及Telerik实施OnClientBlur
事件的方式。只要它没有指向特定类型的浏览器事件,每次触发时都会触发
正如您在第一张快照中看到的那样,您获得了clientX
和clientY
,这意味着您的OnClientBlur
来自MouseEvent
。
而在第二个中,您获得了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
}
}