如何判断可取消事件的默认行为是什么?
例如,我在某处读到TextEvent.TEXT_INPUT具有默认行为,默认行为包括添加与按下的键与TextInput关联的文本字符。这很有道理。
但如果我没有读过,那我怎么知道默认行为是什么?除了猜测。在这种情况下,它可能是显而易见的。但在其他情况下,它可能不是。
例如,在文档中,查看DataGridEvent.HEADER_RELEASE的cancelable属性。它说:
cancelable:true
因此,似乎存在与DataGridEvent.HEADER_RELEASE事件关联的“默认行为”。但它是什么?如果我不确定它是什么,为什么我会取消它呢? :)
感谢。
答案 0 :(得分:0)
全部在documentation中,它说:“DataGrid控件有一个默认的处理程序,用于实现单列排序的事件。”
直播文档非常详尽。如果你继续关注链接,你通常会找到你想要的东西。
答案 1 :(得分:0)
这就是我认为的真实 -
要取消与事件关联的默认行为,必须确定两件事:
事件必须标记为可取消(您可以检查事件的可取消属性以确定此情况)。如果您自己调度事件,请将3rd参数设置为true以将事件标记为可取消。如果事件被标记为可取消,则调用event.preventDefault()会将事件设置为“cancelled”,并且event.isDefaultPrevented()的查询将返回true。如果事件未标记为可取消,则调用event.preventDefault()将不执行任何操作。无论您调用event.preventDefault()多少次,event.isDefaultPrevented()的查询都将返回false。
为事件注册的事件处理程序实际上必须能够不执行任何操作(即阻止与事件关联的默认行为)。所以处理程序必须包含这样的内容:
if(!event.isDefaultPrevented()){doSomething(); }
所以,这仍然留给我一个问题 - “对于X类型的可取消事件,默认行为是什么?”
我想这取决于事件的目标。例如,DataGridEvent.HEADER_RELEASE事件的目标是DataGrid,在DataGrid类中,您可以在构造函数中找到它:
addEventListener(DataGridEvent.HEADER_RELEASE,
headerReleaseHandler,
false, EventPriority.DEFAULT_HANDLER);
并且处理程序如下所示:
private function headerReleaseHandler(event:DataGridEvent):void
{
if (!event.isDefaultPrevented())
{
manualSort = true;
sortByColumn(event.columnIndex);
manualSort = false;
}
}
或者,你可以永远漫无目的地浏览文档,也许会发现这样的答案:
http://livedocs.adobe.com/flex/3/langref/mx/controls/DataGrid.html#event%3aheaderRelease
“DataGrid控件具有此事件的默认处理程序,用于实现单列排序”
希望这个答案有助于减少文档搜索的漫无目的。
杰里米