们在上网的时候,经常有一些登录界面进行输入账号和密码,以及我们在网上填一些信息,这些功能的实现都是通过表单来完成的,今天我们就来讲讲表单。
表单不是指一个标签,而是指一类标签。
我们表单里所有的内容都要写在<form></form>标签中 form的action属性是将表单所填的内容发送到想要发送的后台,而method属性有两个值,分别是get和post。get和post的主要区别是get表单所传的内容会在地址栏里显示出来,并且有长度限制,而post表单所传的内容不会在地址栏显示出来,并且可以视为没有长度限制。一般系统默认get。当然get和post的细区别还是有的,在这里我就不赘述了。
其中最重要的是<input>标签,input标签也是单标签。input标签的type属性值不同,其产生的作用也不同:如:<input type="text">产生的是文本框,一般都是我们登录时输入的账号那样的文本框。<input type="password">,产生的是密码框,一般都是我们登录时输入密码的那个框框。<input type="submit">产生的是提交框,一般是我们登录的那个按钮。这些标签都有value属性,但只有提交框用最合适用,因为文本框和密码框虽然也会展示出来,但效果却差强人意,我们一般都用placeholder属性替代它。
不知大家有没有在网上做过选择题,作者是做过的。网页中的选择题也是用的input。
input的type属性值还有radio,是单选框,有几个选项就写几个input,但要注意每一个input里都要写相同的name属性和属性值,这样的话浏览器才会知道这些是同一道题。
既然有单选题那一定也有多选题了,type的checked属性是多选框,其和单选的用法一样,也都要注意name一样的为一道题,还有一个属性是checked=“checked”,这个可以设定默认选择的选项。
我们也一定遇到过选择文字就能勾选而不用非得去点选框的情况,其实input选择框只有被点击的时候才能选中,但有的时候太小不容易点击甚至有的根本没有显示出来,这样的话用户体验就会非常的差,所以我们引进了一个标签:<label></label>标签,这个标签可以实现点击文字就进行选择的功能,用法就是将input标签和文字写在同一个label标签中,注意每一个选项写一起。
我们来看一下代码和结果:
作者已经尽量去说清楚了,欢迎大家批评指教,希望多多关注[送心]
Input Email 对象
Input Email 对象是 HTML5 新增的。
Input DatetimeLocal 对象表示使用 type="email" 的 HTML <input> 元素。
注意: Internet Explorer 9 (及更早IE版本), 或 Safari 浏览器不支持使用 type="email" 的 HTML <input> 元素。
访问 Input Email 对象
你可以使用 getElementById() 函数来访问使用 type="email" 属性的 <input> 元素:
var x = document.getElementById("myEmail");尝试一下
提示: 你同样可以通过表单的元素集合来访问 Input Email 对象。
创建 Input Email 对象
你可以使用 document.createElement() 方法来创建使用 type="email" 属性的 <input> 元素:
var x = document.createElement("INPUT");
x.setAttribute("type", "email");
Input Email 对象属性
属性 | 描述 |
---|---|
autocomplete | 设置或返回 email 字段的 autocomplete 属性值 |
autofocus | 设置或返回 email 字段在页面加载后是否自动获取焦点 |
defaultValue | 设置或返回 email 字段默认的值 |
disabled | 设置或返回 email 字段是否可用 |
form | 返回使用 email 字段的表单引用 |
list | 返回包含了 email 字段的 datalist 引用 |
maxLength | 设置或返回 email 字段的 maxlength 属性值 |
multiple | 设置或返回 email 字段是否可以输入多个邮箱地址 |
name | 设置或返回 email 字段的 name 属性值 |
pattern | 设置或者返回 email 字段的 pattern 属性值 |
placeholder | 设置或者返回 email 字段的 placeholder 属性值 |
readOnly | 设置或返回 email 字段是否只读 |
required | 设置或返回 email 字段在表单中是否为必填字段 |
step | 设置或返回 email 字段的 step 属性值 |
type | 返回 email 字段的表单元素类型 |
value | 设置或返回 email 字段的 value 属性值 |
标准属性和事件
Input Email 对象同样支持标准 属性 和 事件。
如您还有不明白的可以在下面与我留言或是与我探讨QQ群308855039,我们一起飞!
泛型是TypeScript中的一项重要功能,它允许我们在定义函数、接口或类时,不预先指定具体的类型,而在使用的时候再指定类型。这使得代码更加灵活和可重用。
之前你可能接触或者听说过范型,可能觉得很复杂,本文试图用更简单明了的方式,在几分钟内让你对范型有一个直观的认识。
function identity<T>(arg: T): T {
return arg;
}
这个函数可以接收任何类型的参数,并返回相同类型的结果。
我们先看一个简单的函数:
const getFirstElement = (array: number[]): number => {
return array[0]
}
const number = [1, 2, 3]
const firstNum = getFirstElement(number)
console.log(firstNum)
比如上述例子中的 getFisrtElement 函数,传入的参数是number类型的数组,返回这个数组的第一个元素。
如果我们想让 getFisrtElement 函数也能支持返回一个字符数组的第一个元素。可能会这么改写
const getFirstElement = (array: (number | string)[]): number | string => {
return array[0]
}
如果再有更多种类型,就要不断添加,代码不够优雅也比较冗余。当然,你也可以直接指定参数array的类型为any。不过这样就失去了Typescript中最重要的类型安全的意义了。
const getFirstElement = (array: any): any => {
return array[0]
}
这时候使用范型就会比较适合。利用范型改写一下这个函数
const getFirstElement = <T>(array: T[]): T => {
return array[0]
}
这样,不管入参是什么类型,这个函数都支持返回第一个元素了。如果你使用如VS Code之类的IDE,会发现,使用这个函数的地方会自动推断出正确的类型。
IDE自动识别范型参数的类型
当然,你也可以在调用 getFisrtElement 函数的时候,手动来指定传入的参数类型,这样编译器会自动做语法校验,防止传入错误类型的参数。
const firstNum = getFirstElement<number>(number)
这样,如果你传入其他类型参数,编译器会直接提示错误。避免代码中的潜在bug。
如果你取HTML页面上的一个input对象,使用下面的代码,编辑器可能会报错
这是因为编译器不知道inputEle的具体类型,所以不确定它是否有value这个属性。所以改写成下面的范型形式,就可以避免这个问题,保证了类型安全。
const inputEle = document.querySelector<HTMLInputElement>('name')
inputEle?.value
querySelector后的范型声明了这个函数将会返回的类型。
比如有下面的代码,用于保存API接口返回的数据
type ApiResp = {
status: number
message: string
data: any
}
const response: ApiResp = {
status: 200,
message: 'OK',
data: {
name: 'John',
age: 30,
},
}
其中的data可以保存接口中返回的任意类型的数据。比如上面例子中的用户数据。但是对应使用typscript来说,这么做不够理想。
我们改造一下
type ApiResp<DataType> = {
status: number
message: string
data: DataType
}
const response: ApiResp<{ name: string; age: number }> = {
status: 200,
message: 'OK',
data: {
name: 'John',
age: 30,
},
}
这样,如果有新的api可以返回blog的文章信息,这个范型的类型可以马上适配
type ApiResp<DataType> = {
status: number
message: string
data: DataType
}
type UserResp = { name: string; age: number }
type BlogResp = { title: string; content: string }
const userResp: ApiResp<UserResp> = {
status: 200,
message: 'OK',
data: {
name: 'John',
age: 30,
},
}
const blogResp: ApiResp<BlogResp> = {
status: 200,
message: 'OK',
data: {
title: 'Hello',
content: 'World',
},
}
这样使用范型改写后,我们的代码就有了很强的扩展性。
对于上的例子,如果我们通过API得到的data里的内容始终都是一个object的话,我们可以在类型定义的时候,使用extends关键词来加强约束
type ApiResp<DataType extends object> = {
status: number
message: string
data: DataType
}
这样,如果当使用这个类型的时候,使用了非object的类型,编译器就会及时报错
const userResp: ApiResp<string> = {
status: 200,
message: 'OK',
data: 'abc',
}
好了,到此,您应该对TypeScript中的范型有了足够的了解了,希望在今后的编码中可以更多的使用它来简化你的工作。
*请认真填写需求信息,我们会在24小时内与您取得联系。