2009-01-24 4 views
31

Ich baue eine mobile Web-App für Android-Nutzer. Ich muss wissen, welche DOM-Ereignisse mir zur Verfügung stehen. Ich konnte die folgende Arbeit machen, aber nicht sehr zuverlässig:Welche DOM-Ereignisse sind für WebKit unter Android verfügbar?

  • klicken
  • Mouseover
  • mousedown-
  • mouseup
  • Änderung

Ich habe nicht in der Lage gewesen, Holen Sie Folgendes zur Arbeit:

  • keypress
  • keydown
  • keyup

Kennt jemand die vollständige Liste von dem, was unterstützt wird und in welchen Kontexten (beispielsweise ist Onchange nur Eingaben zu bilden?)? Ich kann keinen Verweis auf The Googles finden.

Danke!

Update: Ich fragte the same question on the Android developers list. Ich werde noch mehr Tests machen und meine Ergebnisse hier und dort veröffentlichen.

Antwort

20

OK, das ist interessant. Mein Anwendungsfall ist, dass ich eine Reihe von Links (A Tags) auf einem Bildschirm in einer WebKit-Ansicht habe. Um den verfügbaren Ereignisbereich zu testen, habe ich mit jQuery 1.3.1 jedes Ereignis, das unter this page aufgelistet ist (auch solche, die keinen Sinn ergeben) an die Links angehängt, dann die Nach-oben-, Nach-unten- und Eingabetasten auf dem Android-Emulator verwendet und notiert Ereignisse gefeuert unter welchen Umständen.

Hier ist der Code, den ich verwendet habe, um die Ereignisse anzuhängen, mit Ergebnissen zu folgen. Hinweis: Ich verwende "Live" -Ereignisbindung, da die Tags A für meine Anwendung dynamisch eingefügt werden.

$.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); 
    }); 
}); 

Hier ist, wie es schüttelte:

  • auf der ersten Seite Last mit nichts markiert (keine hässlichen Orange Auswahlfeld um ein beliebiges Element), Taste nach unten auf das erste Element auszuwählen, die folgenden Ereignisse gefeuert (in Reihenfolge): mouseover, mouseenter, mousemove, DOMFocusIn

  • Mit einem Elemente ausgewählt, zum nächsten Punkt bewegt die Abwärtstaste, feuerten die folgenden Ereignisse (in Reihenfolge): mouseout, mouseover, mousemove, DOMFocusOut, DOMFocusIn

  • Mit einem Element ausgewählt, die "Enter" -Taste klicken, feuerte die folgenden Ereignisse (in Reihenfolge): mousemove, mousedown, DOMFocusOut, mouseup, click, DOMActivate

Dies erscheint mir als eine Reihe von zufälligen Müll.Und wer ist dieses freche IE-only-Event (mouseenter), das einen Cameo macht und dann den Rest des Tages freimacht? Naja, zumindest jetzt weiß ich, auf welche Ereignisse ich achten muss.

Es wäre toll, wenn andere wollen meinen Testcode und tun einem gründlichere Durchlauf nehmen, vielleicht Formularelemente verwenden, Bilder usw.

5

Ab Android 1.5, die gleichen Note (Start | verschieben | Ereignisse, die das iPhone unterstützt, funktionieren auch in Android.

Ein Problem, das ich fand, war, dass touchmove endet in der Warteschlange. Es gibt noch keine Problemumgehung.

+0

Unterstützt es auch Iphone ongesture-Ereignisse? Wird es? Ich bemerkte, das funktioniert gut auf meinem JFADP1.5: http://iphone.opencyclemap.org/ – hendry

Verwandte Themen