Независимо от того, что я пытаюсь, я не могу вызвать событие click для кнопки «по умолчанию» в элементе управления Alert в приложении Flex 3.4.
Alert.show(
'Are you sure you want to delete the selected link?',
'Confirm Delete',
Alert.YES | Alert.CANCEL,
null,
confirmDelete,
null,
Alert.YES
);
В приведенном выше примере кода последний аргумент: Alert.YES
указывает, что опция «по умолчанию» (из побитового списка в 3-м аргументе) является кнопкой «Да». Теоретически, и исходя из моего опыта разработки приложений для Windows, «кнопка по умолчанию» означает, что нажатие клавиши ввода (или иногда пробела) вызывает событие нажатия для этой кнопки.
Если это имеет значение, то оповещение является модальным.
Я вижу, что кнопка имеет стиль по умолчанию: она получает немного ореола или дополнительную границу по сравнению с кнопкой «Отмена» или по сравнению с ней при передаче нуля в качестве последнего аргумента.
Однако нажатие клавиш ввода и пробела, похоже, никак не влияет. Я делаю что-то не так или пропускаю какой-то важный шаг для того, чтобы заставить эту функциональность работать?
Обновление 2010-02-17:
На основании моего второго комментария к ответу @ rhtx:
Хорошо, наконец-то дошли до попытки это. Так как класс Alert использует много статических методов, я просто скопировал классы Alert и AlertForm в свой проект (и исправил несколько относительных путей для включений), и в результате я получил более уродливое окно предупреждения, которое работает (или не работает). (в зависимости от вашей точки зрения) так же, как класс оповещения ванили. Однако я осознал, что, если вы нажмете TAB, он будет фокусировать кнопки оповещения, и в этот момент нажатие Escape / Enter будет иметь желаемый эффект ... Так как же устранить необходимость нажатия TAB?
Я попробовал еще несколько вещей и никуда не попал.
Я пытался подделать нажатие клавиши TAB после открытия оповещения (с типами событий KEY_DOWN и KEY_UP):
var a:Alert = Alert.show(msg, title, Alert.YES | Alert.CANCEL, null, fnCb);
var tabEvent:KeyboardEvent = new KeyboardEvent(
KeyboardEvent.KEY_DOWN,
true,
false,
0,
Keyboard.TAB
);
a.dispatchEvent(tabEvent);
Я также нашел это сообщение в блоге и попытался сделать это, чтобы сфокусировать alertForm
:
var a:Alert = Alert.show(msg, title, Alert.YES | Alert.CANCEL, null, fnCb);
a.mx_internal::alertForm.setFocus();
Ни одна из этих ошибок не сгенерировала, но ни одна не дала желаемого результата.