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>