Вопрос

Я создаю мобильное веб-приложение, ориентированное на пользователей Android.Мне нужно знать, какие события DOM доступны для меня.Я смог выполнить следующую работу, но не очень надежно:

  • щелчок
  • наведение курсора мыши
  • наведение курсора мыши
  • наведение курсора мыши
  • изменение

Мне не удалось заставить работать следующее:

  • нажатие клавиши
  • нажатие клавиши
  • ввод ключа

Кто-нибудь знает полный список того, что поддерживается и в каких контекстах (например, доступен ли onchange только для формирования входных данных?)?Я не могу найти ссылку на это в Google.

Спасибо!

Обновить: Спросил я тот же вопрос в списке разработчиков Android.Я проведу еще несколько тестов и опубликую свои результаты как здесь, так и там.

Это было полезно?

Решение

Ладно, это интересно.Мой вариант использования заключается в том, что у меня есть ряд ссылок (A теги) на экране в представлении WebKit.Чтобы проверить, какая область событий доступна, используя jQuery 1.3.1, я прикрепил каждое событие, указанное на эта страница (даже те, которые не имеют смысла) к ссылкам, затем использовали элементы управления up, down и enter в эмуляторе Android и отмечали, какие события запускались при каких обстоятельствах.

Вот код, который я использовал для прикрепления событий с последующими результатами.Обратите внимание, я использую привязку событий "в реальном времени", потому что для моего приложения A теги вставляются динамически.

$.each([
    'blur',
    'change',
    'click',
    'contextmenu',
    'copy',
    'cut',
    'dblclick',
    'error',
    'focus',
    'keydown',
    'keypress',
    'keyup',
    'mousedown',
    'mousemove',
    'mouseout',
    'mouseover',
    'mouseup',
    'mousewheel',
    'paste',
    'reset',
    'resize',
    'scroll',
    'select',
    'submit',

    // W3C events
    'DOMActivate',
    'DOMAttrModified',
    'DOMCharacterDataModified',
    'DOMFocusIn',
    'DOMFocusOut',
    'DOMMouseScroll',
    'DOMNodeInserted',
    'DOMNodeRemoved',
    'DOMSubtreeModified',
    'textInput',

    // Microsoft events
    'activate',
    'beforecopy',
    'beforecut',
    'beforepaste',
    'deactivate',
    'focusin',
    'focusout',
    'hashchange',
    'mouseenter',
    'mouseleave'
], function () {
    $('a').live(this, function (evt) {
        alert(evt.type);
    });
});

Вот как это вышло:

  • При загрузке первой страницы, на которой ничего не выделено (нет уродливого оранжевого поля выбора вокруг какого-либо элемента), с помощью кнопки вниз для выбора первого элемента запускаются следующие события (по порядку): mouseover, mouseenter, mousemove, DOMFocusIn

  • При выбранном элементе, переходе к следующему элементу с помощью кнопки вниз запускаются следующие события (по порядку): mouseout, mouseover, mousemove, DOMFocusOut, DOMFocusIn

  • После выбора элемента при нажатии кнопки "enter" запускаются следующие события (по порядку): mousemove, mousedown, DOMFocusOut, mouseup, click, DOMActivate

Это поражает меня как куча случайного мусора.И кто это дерзкое мероприятие, предназначенное только для IE (mouseenter) снимаешь камео, а потом берешь отгул на остаток дня?Ну что ж, по крайней мере, теперь я знаю, за какими событиями следует следить.

Было бы здорово, если бы другие захотели взять мой тестовый код и выполнить более тщательный прогон, возможно, используя элементы формы, изображения и т.д.

Другие советы

Поскольку это второй по популярности пост Android + JavaScript на SO (который является просто печальным комментарием о состоянии веб-разработки, ориентированной на платформу Android), я подумал, что, возможно, стоит включить ссылку на результаты тестирования pkk touch event на http://www.quirksmode.org/mobile/tableTouch.html а также http://www.quirksmode.org/mobile/ в общем.

Начиная с Android 1.5, те же события касания (запуск | перемещение | завершение | отмена), которые поддерживает iPhone, работают и в Android.

Одна проблема, которую я обнаружил, заключалась в том, что конечные точки touchmove попадают в очередь.Обходного пути пока нет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top