WML学习之六 事件
事件
WML的事件基本上分为两大类,一类是键盘(包括软硬按钮)输入事件,用do>标签来处理,另一类是相关页面内部的事件,用onevent>标签来处理。
do>的语法如下:do type="type" label="label" name="name" optional="false|true">任务/do>,任务就是以前提到的四种任务。do>的属性中,type是必选的,其他为可选。
*label属性,指定了软按钮在屏幕上的显示文本。目前type属性为delete,help,prev时该属性无效。
*name属性,为do>取个名字,同一的CARD里的do>不能重名。如果CARD级的do>和DECK级的do>同名,则覆盖DECK级的do>。
*optional属性,指定手机是不是可以忽略这个事件,默认值是false。
*type属性,指定触发的事件,具体如下;
type值 触发原因
accept 调用ACCEPT按钮机制
delete 调用DELETE按钮机制
help 调用HELP按钮机制
options 调用选择按钮机制
prev 调用PREV按钮机制
reset 调用清除和重新设定手机状态时的RESET机制(目前不支持)
unknown 调用unknown机制,等于type=""(目前不支持)
vnd. co-type 调用厂商特定的机制(目前不支持)
X-*, x-* 供以后使用(不保留)(目前不支持)
test6.wml
---------------
?xml version="1.0"?>
!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
wml>
head>
meta http-equiv="Cache-Control" content="max-age=0"/>
/head>
card id="card0" ordered="false">
do type="accept" label="InputName" name="do1">
go href="#card01"/>
/do>
p>
NAME:input name="userName" title="User Name" type="text" format="*M" emptyok="false" maxlength="12"/>
/p>
/card>
card id="card01">
p>
You name is $(userName:noesc).
/p>
/card>
/wml>
onevent>的语法如下,onevent type="type">任务/onevent>,必选属性type的取值如下:
type值 如果用户执行了以下操作就执行任务
onpick 用户选择或不选一个option>项时。
onenterforward 用户使用go>任务到达一个CARD时。
onenterbackward 用户使用prev>任务返回到前面的CARD时,或者按BACK按钮时。
ontimer 当timer>过期时。
test7.wml
---------------
?xml version="1.0"?>
!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
wml>
head>
meta http-equiv="Cache-Control" content="max-age=0"/>
/head>
card id="card0" ordered="false">
p>
Please select a city...
select title="Cities List" name="city">
option title="Beijing" value="Beijing">
onevent type="onpick">
go href="#card01"/>
/onevent>Beijing/option>
option title="Shanghai" value="Shanghai" onpick="#card01">Shanghai/option>
option title="Hongkong" value="Hongkong" onpick="#card01">Hongkong/option>
/select>
lt;/p>
/card>
card id="card01">
p>
You are Living in $(city:noesc)
/p>
/card>
/wml>
timer/>可以用来在用户不进行任何操作的一段时间后,自动执行一个任务,任何激活CARD页面的任务和用户操作都会启动timer/>,而任务进行时,timer/>就停止。每个CARD只能有一个timer/>,一个timer/>只能触发一个任务。语法如下:timer name="variable" value="value"/>,其中name为可选属性,指定为一个变量名,当退出该CARD时,该变量存储此时定时器的值,当定时器超时时,手机将该变量设为0;value为必选属性,用来设置定时器的定时值,最小单位为0.1秒。
test8.wml
---------------
?xml version="1.0"?>
!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
wml>
head>
meta http-equiv="Cache-Control" content="max-age=0"/>
/head>
card id="card1" ontimer="#card2">
timer name="time1" value="50"/>
p align="center">
After 5s, goto card2
/p>
/card>
card id="card2">
onevent type="ontimer">
go href="#card1"/>
/onevent>
timer name="time2" value="50"/>
p align="center">
Here is card2!
/p>
/card>
/wml>
再提一下,onevent> timer> do>三者必须按以上顺序写。
此外在DECK级还可以加入template>,用来将事件捆绑在DECK级上,语法如下:
template onenterforward="url" onenterbackward="url" ontimer="url">
do>或者onevent>
/template>
test9.wml
---------------
?xml version="1.0"?>
!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
wml>
head>
meta http-equiv="Cache-Control" content="max-age=0"/>
/head>
template>
do type="accept" label="deckPress" name="do1">
go href="#card01"/>
/do>
/template>
card id="card0" ordered="false">
do type="accept" label="cardPress" name="do1">
go href="#card02"/>
/do>
p>
Press ACCEPT...
/p>
/card>
card id="card01">
p>
Here is card01
/p>
/card>
card id="card02">
p>
Here is card02
/p>
/card>
/wml>