Android上的WebKit可以使用哪些DOM事件?

时间:2009-01-24 07:13:16

标签: android dom webkit dom-events

我正在构建面向Android用户的移动网络应用。我需要知道哪些DOM事件可供我使用。我已经能够完成以下工作,但不是非常可靠:

  • 点击
  • 鼠标悬停
  • 鼠标按下
  • 鼠标松开
  • 变化

我无法让以下工作:

  • 按键
  • KEYDOWN
  • KEYUP

有没有人知道支持的内容的完整列表以及在什么情况下(例如,onchange只能用于表单输入?)?我在谷歌上找不到这方面的参考资料。

谢谢!

更新:我问the same question on the Android developers list。我将进行更多测试,并将在这里和那里发布我的结果。

3 个答案:

答案 0 :(得分:22)

好的,这很有意思。我的用例是我在WebKit视图的屏幕上有一系列链接(A标签)。为了测试可用的事件区域,使用jQuery 1.3.1,我将this page上列出的每个事件(甚至那些没有意义的事件)附加到链接,然后在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,{{ 1}},mouseentermousemove

  • 选择一个项目后,使用向下按钮移动到下一个项目,会触发以下事件(按顺序):DOMFocusInmouseoutmouseover,{{ 1}},mousemove

  • 选择项目后,点击“输入”按钮,会触发以下事件(按顺序):DOMFocusOutDOMFocusInmousemovemousedownDOMFocusOutmouseup

这让我觉得是一堆随意的垃圾。并且,那个只有IE浏览器的事件(click)制作了一个客串,然后休息了一天剩下的时间?哦,至少现在我知道要注意哪些事件。

如果其他人想要使用我的测试代码并进行更彻底的测试,可能会使用表单元素,图像等,这将是很棒的。

答案 1 :(得分:10)

由于这是SO上第二个最受欢迎的Android + JavaScript帖子(这只是针对Android平台的Web开发状态的悲伤评论),我认为包括pkk的触摸事件测试结果的链接可能是值得的在http://www.quirksmode.org/mobile/tableTouch.html以及http://www.quirksmode.org/mobile/一般。

答案 2 :(得分:6)

从Android 1.5开始,iPhone支持的同样触摸(开始|移动|结束|取消)事件也适用于Android。

我发现的一个问题是touchmove结束了排队。还没有解决方法。