我正在构建面向Android用户的移动网络应用。我需要知道哪些DOM事件可供我使用。我已经能够完成以下工作,但不是非常可靠:
我无法让以下工作:
有没有人知道支持的内容的完整列表以及在什么情况下(例如,onchange只能用于表单输入?)?我在谷歌上找不到这方面的参考资料。
谢谢!
更新:我问the same question on the Android developers list。我将进行更多测试,并将在这里和那里发布我的结果。
答案 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}},mouseenter
,mousemove
选择一个项目后,使用向下按钮移动到下一个项目,会触发以下事件(按顺序):DOMFocusIn
,mouseout
,mouseover
,{{ 1}},mousemove
选择项目后,点击“输入”按钮,会触发以下事件(按顺序):DOMFocusOut
,DOMFocusIn
,mousemove
,mousedown
,DOMFocusOut
,mouseup
这让我觉得是一堆随意的垃圾。并且,那个只有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结束了排队。还没有解决方法。