WML的事件基本上分为两大类,一类是键盘(包括软硬按钮)输入事件,用<do>标签来处理。另一类是相关页面内部的事件,用<onevent>标签来处理。
<do>的语法如下:

    <do type="type" label="label" name="name" optional="false|true">

    任务</do>,任务就是以前提到的四种任务。<do>的属性中,type是必选的,其他为可选。

表 3-5 type的枚举值

枚举值

触发原因

accept

调用ACCEPT按钮机制

delete

调用DELETE按钮机制

help

调用HELP按钮机制

options

调用选择按钮机制

prev

调用PREV按钮机制

reset

调用清除和重新设定手机状态时的RESET机制(目前不支持)

unknown

调用unknown机制。等价于type=""(目前不支持)

Vnd. co-type

调用厂商特定的机制(目前不支持)

X-*, x-*

供以后使用(不保留)(目前不支持)

    为了演示事件的触发过程,请看下面的例子:

<?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>

    使用Nokia WAP Toolkit对该程序进行测试。启动Nokia WAP Toolkit,并选择“Go”下的“Open Location”。在输入URL地址后,可以看到模拟器上出现图3-18所示的界面。

图 3-18 主界面

    在选择“Optionos”后出现了事件选择项(图3-19)。注意到“InputName”是do标签名字。

图 3-19 事件选项

    在选择了“InputName”事件后,模拟器上将出现图3-20所示的界面:

图 3-20 输出姓名

    <onevent>的语法如下:

        <onevent type="type">任务</onevent>

    必选属性type的取值如表3-6所示:

表 3-6 type属性的取值

枚举值

如果用户执行了以下操作就执行任务

onpick

用户选择或不选一个<option>项时

onenterforward

用户使用<go>任务到达一个卡片时

onenterbackward

用户使用<prev>任务返回到前面的卡片时,或者按BACK按钮时

ontimer

当<timer>过期时

    请研究下面的例子程序:

<?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>
    </p>
    </card>
    <card id="card01">
        <p>
            You are Living in $(city:noesc)
        </p>
    </card>
</wml> 

    <timer/>可以用作在用户不进行任何操作的一段时间后,自动执行一个任务,任何激活卡片页面的任务和用户操作都会启动<timer/>,而任务进行时,<timer/>就停止。每个卡片只能有一个<timer/>,一个<timer/>只能触发一个任务。语法如下:

        <timer name="variable" value="value"/>

    其中name为可选属性,指定为一个变量名。当退出该卡片时,该变量存储此时定时器的值。当定时器超时时,手机将该变量设为0;value为必选属性,用来设置定时器的定时值,最小单位为0.1秒。
    请研究下面的例子程序:

<?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>三者必须按以上顺序写。
    此外在页面级还可以加入<template>,用来将事件捆绑在页面级上,语法如下:

<template onenterforward="url" onenterbackward="url" ontimer="url">
    <do>或者<onevent>
</template>

    请研究下面的例子程序:

<?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>