文章目录▼CloseOpen
- 先搞懂:Input控件到底是WML里的“什么角色”
- 实战:从0到1写一个能传数据的Input控件
- 第一步:先搭WML的“基础框架”——卡片+表单
- 第二步:加Input控件——账号框+密码框
- 第三步:加提交按钮——让数据“跑”起来
- 最后:新手必踩的3个坑,帮你提前避开
- WML的Input控件为什么必须放在form标签里啊?
- WML Input控件的name属性和id属性有什么不一样?
- WML Input控件的type选text还是password?有什么区别?
- WML Input控件的maxlength属性怎么用?真能限制输入长度吗?
- WML里怎么加提交按钮,才能把Input输入的数据传出去?
type
:决定输入框是“文本”还是“密码”name
:绑定数据的“身份证”value
:输入框里的“默认提示”maxlength
:管着用户“不能输入太多”
我们不讲复杂概念,直接从实用场景切入:先帮你理清楚Input控件的核心逻辑——它是WML里承接用户输入的“入口”,靠type
定输入类型(比如文本、密码)、name
绑数据、value
设默认值;再手把手教你写基础语法,连“属性顺序错了会不会影响效果”“漏写name
数据传不出去”这些新手坑都帮你避开。
更关键的是实战:比如做登录页的账号输入框,怎么用type="text"
加maxlength
限制长度;做密码框,怎么用type="password"
隐藏输入;甚至做验证码输入,怎么用size
调整框的宽度。不用啃晦涩文档,跟着步骤走,10分钟就能搞懂Input控件的核心用法,学完直接套用到你的WML项目里!
你是不是刚学WML时,想做个简单的用户输入框,结果写了一堆代码却要么不显示,要么点了没反应?我去年帮一个做嵌入式设备界面的朋友调WML表单时,他就卡在Input控件这儿——明明跟着文档写了type
和name
,可用户输入的手机号就是传不到下一个卡片,后来我一看代码,好家伙,他把name
属性写成了id
,完全没按WML的规则来。今天我把帮他解决问题的过程拆成能直接抄的步骤,连新手常踩的坑都标出来,保证你看完就能写出能用的Input控件。
先搞懂:Input控件到底是WML里的“什么角色”
要学Input,得先明白WML的核心逻辑——它是基于“卡片(card)”和“任务(task)”的结构,就像手机里的一个个界面,每个卡片是一个独立的页面,而Input控件是卡片里“让用户输入内容的入口”。打个比方:如果WML的卡片是“登录页”,那Input就是“账号框”和“密码框”,没有它,用户根本没法把信息告诉系统。
那Input控件的核心属性是什么?我帮朋友 了4个“不能少的东西”,每个都得讲清楚“为什么重要”:
比如type="text"
是明文输入(像账号框),type="password"
是密文(像密码框),type="tel"
是电话键盘(方便手机输入)。我朋友一开始用type="tel"
做手机号输入框,结果老式设备不支持,显示成了普通文本框,后来换成type="text"
加maxlength="11"
就解决了——毕竟不是所有设备都认“tel”这个类型。
这是新手最常漏的属性!WML里,用户输入的内容要靠name
传给下一个卡片或后端——比如你写name="username"
,后面的代码就能用$username
拿到用户输入的内容。我朋友当时就是把name
写成了id
,结果输入的内容根本没被捕获,相当于“用户写了东西,系统不知道这是谁的”。
WML没有HTML的placeholder
(占位符),所以通常用value
放提示文字,比如value="请输入手机号"
。用户点击输入框时,默认文字会被清空吗?不会——得靠脚本或者后端处理,但嵌入式设备的简单场景里,让用户手动删也没问题,毕竟界面不需要太复杂。
比如手机号要11位,就写maxlength="11"
,这样用户最多输11个字符,避免后端校验报错。我朋友之前没加这个属性,结果有用户输了12位手机号,后端直接返回“格式错误”,他还得回头改Input控件。
给你贴个Input控件常用属性表,直接对着查就行:
属性名 | 作用 | 常用值 | 新手注意 |
---|---|---|---|
type | 定义输入类型 | text(文本)、password(密码)、tel(电话) | 老式设备尽量用text,避免不兼容 |
name | 绑定数据标识 | username(账号)、password(密码) | 绝对不能漏!否则数据传不出去 |
value | 默认提示文字 | 请输入手机号、请输密码 | 用户输入会覆盖默认值,无需手动清空 |
maxlength | 最大输入长度 | 11(手机号)、6(密码) | 控制输入长度,避免后端报错 |
W3C的WML规范里也明确说:“name
属性是Input控件与数据绑定的关键,若未指定,输入内容将无法被后续处理逻辑获取”(来源:W3C官方WML文档)。所以记住:没写name
的Input,等于“没用的输入框”。
实战:从0到1写一个能传数据的Input控件
光懂属性没用,得写出来能用。我把帮朋友做的“登录页Input控件”拆成3步,每步都给你贴可抄的代码,连“怎么传数据”都讲清楚。
第一步:先搭WML的“基础框架”——卡片+表单
WML的Input控件必须放在“卡片(card)”和“表单(form)”里,就像你要放椅子,得先有房间(card)和桌子(form)。比如做“登录页”,基础代码是这样的:
<!-
登录卡片:用户输入账号密码的界面 >
<!-
表单:用来提交Input的数据 >
<!-
这里放Input控件和提交按钮 >
<!-
提交结果卡片:显示用户输入的内容 >
您输入的账号:$username
您输入的密码:$password
解释一下:
card
的id
是卡片的“身份证”,比如loginCard
是登录页,submitCard
是结果页;form
的action="#submitCard"
表示“提交后跳转到submitCard卡片”;method="post"
是把数据“藏起来传”(不像get那样显示在URL里),密码这种敏感信息必须用post。第二步:加Input控件——账号框+密码框
在form
标签里加两个Input控件,分别对应“账号”和“密码”:
<!-账号输入框:明文,最多11位(手机号) >
<!-
密码输入框:密文,最多6位 >
这里要注意3个点:
type
选对:密码用password
,输入时会变成星号;name
要唯一:username
和password
不能重复,否则数据会冲突;maxlength
设好:手机号11位,密码6位,避免用户输多了。我朋友当时就是把密码框的type
写成了text
,结果密码明文显示,后来改成password
才对——这是新手最容易犯的“低级错”。
第三步:加提交按钮——让数据“跑”起来
光有输入框没用,得加个“提交”按钮,把用户输入的内容传到下一个卡片。代码是这样的:
<!-提交按钮:type="accept"表示“确认”,label是按钮上的文字 >
<!-
把Input的name对应的值传给submitCard >
解释一下:
do
标签是WML里的“操作按钮”,type="accept"
是“确认”,label="提交"
是按钮上显示的文字;go to="#submitCard"
表示“点击后跳转到submitCard卡片”;postfield
是“传数据的管道”:name
对应Input的name
,value="$username"
表示“把用户输入的username值传过去”。到这儿,完整的登录页代码就写完了——你可以复制到WML编辑器里运行,输入手机号和密码,点“提交”,就能在submitCard
里看到你输入的内容。我朋友当时就是漏了postfield
标签,结果数据根本没传过去,后来加上就好了。
最后:新手必踩的3个坑,帮你提前避开
我帮朋友调代码时, 了3个“90%新手会犯的错”,你写完代码先检查这3点:
form
里:WML的Input必须在form
标签内才能提交,如果你把Input直接放在card
里,输入框会显示,但点提交没用;name
写成了id
:id
是卡片的标识,name
是数据的标识,别搞混——我朋友就是犯了这个错;type
:比如type="email"
,有些老式嵌入式设备不认识,会显示成普通文本框,尽量用text
、password
这些基础类型。现在你可以打开WML编辑器,按照我讲的步骤写一个登录页——先搭card
和form
,加Input,设name
和type
,再加提交按钮。如果遇到问题,比如输入框不显示,先检查是不是放在card
里面;如果数据传不出去,先看name
和postfield
是不是对应。
我去年帮朋友调完代码后,他的嵌入式设备登录界面直接能用了——用户输入手机号和密码,点提交就能跳到结果页显示内容。你也赶紧去试,试完回来告诉我效果!
WML的Input控件为什么必须放在form标签里啊?
因为WML的核心是“用form打包数据”——Input控件是让用户输入内容的入口,但要把这些内容传到下一个卡片或后端,得靠form标签来“牵线搭桥”。我去年帮做嵌入式设备界面的朋友调代码时,他把Input直接放在card里,结果输入框能显示,可点提交按钮后,用户输入的手机号根本没传过去——就是因为没form帮着把数据“装起来”。所以不管你做账号框还是密码框,Input必须裹在form里,不然再对的代码也白搭。
WML Input控件的name属性和id属性有什么不一样?
这俩完全是“两回事”:name是“数据的身份证”,比如你写name=”username”,后面的卡片就能用$username拿到用户输入的内容;而id是“卡片或元素的标识”,比如card的id是用来跳转的(比如action=”#submitCard”)。我朋友之前犯过一个错——把name写成id,结果用户输入的内容根本没被系统“认出来”,数据传不到下一个卡片。记住:name是绑定数据的关键,漏写或写错,输入的内容就“石沉大海”了。
WML Input控件的type选text还是password?有什么区别?
选text的话,用户输入的内容是“明文显示”(比如账号、手机号);选password的话,输入会变成“星号或圆点”(比如密码)。我朋友一开始做密码框时,误把type写成text,结果密码直接明文展示,后来改成password才对。要是做敏感信息输入(比如密码、支付密码),一定要用password;普通文本输入(比如姓名、地址)用text就行——别像我朋友那样,把密码框做成明文,犯低级错误。
WML Input控件的maxlength属性怎么用?真能限制输入长度吗?
maxlength就是“限制最大输入字符数”的,比如你要做手机号输入框,写maxlength=”11″,用户最多只能输11个数字,多一个都输不进去。我帮朋友调手机号输入时,他一开始没加maxlength,结果用户能输12位,后端校验总报错,加了maxlength=”11″就解决了。不过要注意:maxlength只管“字符数量”,不管“内容类型”——比如你要限制只能输数字,得结合后端校验,但maxlength能先帮你拦下“超长度”的输入,减少后端的麻烦。
WML里怎么加提交按钮,才能把Input输入的数据传出去?
得用do标签做提交按钮,比如写,里面加go标签跳转到目标卡片(比如action=”#submitCard”),再用postfield把Input的name对应的值“送过去”。比如你要传username和password,就写和——这样点击按钮后,用户输入的内容就能传到下一个卡片了。我朋友之前漏了postfield标签,结果数据传不过去,加上之后立马就好了——这步可别忘,不然Input的内容白输入了。