
下面是HTML代码:
<html>
<script language="javascript">
function on_submit()
{//验证数据的合法性
if (form1usernamevalue == "")
{
alert("用户名不能为空,请输入用户名!");
form1usernamefocus();
return false;
}
if (form1userpasswordvalue == "")
{
alert("用户密码不能为空,请输入密码!");
form1userpasswordfocus();
return false;
}
if (form1reuserpasswordvalue == "")
{
alert("用户确认密码不能为空,请输入密码!");
form1reuserpasswordfocus();
return false;
}
if (form1userpasswordvalue != form1reuserpasswordvalue)
{
alert("密码与确认密码不同!");
form1userpasswordfocus();
return false;
}
if (!(form1idnumbervaluelength == 15) && !(form1idnumbervaluelength == 18))
{
alert("身份z输入有误,请重新输入!");
form1idnumberfocus();
return false;
}
if (form1emavaluelength == 0)
{
alert("请输入E-mail地址!");
form1emafocus();
return false;
}
if (form1emavaluelength != 0)
{
for (i=0; i<form1emavaluelength; i++)
if (form1emavaluecharAt(i)=="@")
break;
if (i == form1emavaluelength)
{
alert("非法E-Mail地址!");
form1emafocus();
return false;
}
}
else
{
alert("请输入E-mail!");
form1emafocus();
return false;
}
}
</script>
<head>
<meta >
<title>新用户注册</title>
</head>
<body>
<form method="POST" action="registjsp" name="form1"
onsubmit="return on_submit()">
新用户注册
<br>
<br>
用户名():
<input type="text" name="username" size=20>
<br>
密 码():
<input type="password" name="userpassword" size="20">
<br>
再输一次密码():
<input type="password" name="reuserpassword" size="20">
<br>
性 别:
<input type="radio" value="男" checked name="sex">
男
<input type="radio" name="sex" value="女">
女
<br>
出生年月:
<input name="year" size="4" maxlength="4">
年
<select name="month">
<option value="1" selected>
1
</option>
<option value="2">
2
</option>
<option value="3">
3
</option>
<option value="4">
4
</option>
<option value="5">
5
</option>
<option value="6">
6
</option>
<option value="7">
7
</option>
<option value="8">
8
</option>
<option value="9">
9
</option>
<option value="10">
10
</option>
<option value="11">
11
</option>
<option value="12">
12
</option>
</select>
月
<input name="day" size="3" maxlength=4>
日
<br>
身份z号:
<input type="text" name="idnumber" size=20>
<br>
电子邮箱:()
<input name="ema" maxlength="28">
<br>
家庭住址:
<input type="text" name="address" size="20">
<br>
<input type="submit" value="提交" name="B1">
<input type="reset" value="全部重写" name="B2">
<br>
</form>
</body>
</html>
运行结果如下图:
个人中心制作
1 minejs
// pages/mine/minejsvar app = getApp()
Page({
data: {
userInfo: {},
motto: 'Hello World', // orderItems
orderItems: [
{
typeId: 0,
name: '待付款',
url: 'bill',
imageurl: '//images/person/personal_paypng',
},
{
typeId: 1,
name: '待发货',
url: 'bill',
imageurl: '//images/person/personal_shippedpng',
},
{
typeId: 2,
name: '待收货',
url: 'bill',
imageurl: '//images/person/personal_receiptpng'
},
{
typeId: 3,
name: '待评价',
url: 'bill',
imageurl: '//images/person/personal_commentpng'
}
],
}, //事件处理函数
toOrder: function () {
wxnavigateTo({
url: '/order/order'
})
},
onLoad: function () {
consolelog('onLoad') var that = this
//调用应用实例的方法获取全局数据
appgetUserInfo(function (userInfo) {
//更新数据
thatsetData({
userInfo: userInfo
})
})
}
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
toOrder :事件监听,跳转到我的订单界面 onLoad:在加载过程中,获取用户的信息
2 minewxml
<!--pages/mine/minewxml--><view class="container"><view class="userinfo">
<image class="userinfo-avatar" src="{{userInfoavatarUrl}}" background-size="cover"></image>
<text class="userinfo-nickname">{{userInfonickName}}</text>
<image src="//images/person/account_bgpng" class="account-bg">
</image>
</view>
<view class="separate"></view>
<view class="order" catchtap="toOrder">
<text class="myorder-text">我的订单</text>
<text class="myorderlook-text">查看全部订单</text>
<image class="next-image" src="//images/person/nextpng"></image>
</view>
<view class="line"></view>
<view class="navs">
<block wx:for-items="{{orderItems}}" wx:key="name">
<view class="nav-item" catchtap="toOrder" data-type="{{itemname}}" data-typeid="{{itemtypeId}}">
<image src="{{itemimageurl}}" class="nav-image" />
<text>{{itemname}}</text>
</view>
</block>
</view>
<view class="separate"></view>
<view class="person-list">
<view class="list-item">
<image class="item-image" src="//images/person/personal_favoritepng"></image>
<text class="item-text">我的收藏</text>
</view>
<view class="person-line"></view>
<view class="list-item">
<image class="item-image" src="//images/person/personal_sitepng"></image>
<text class="item-text">收货地址</text>
</view>
<view class="person-line"></view>
<view class="list-item">
<image class="item-image" src="//images/person/personal_sale_recordpng"></image>
<text class="item-text">售后记录</text>
</view>
<view class="person-line"></view>
<view class="list-item">
<image class="item-image" src="//images/person/personal_evaluatedpng"></image>
<text class="item-text">我的评价</text>
</view>
<view class="person-line"></view>
<view class="list-item">
<image class="item-image" src="//images/person/personal_sharepng"></image>
<text class="item-text">推广邀请</text>
</view>
</view>
<view class="separate"></view></view>
你也可以通过第三方平台模块来制作 更方便 速成应用 小程序开发平台
可能是小程序服务端构建出来的小程序代码不符合微信小程序的规范,导致静态资源(,字体,js文件,json文件等)返回的 Content-Size 过大,微信小程序默认最大通信大小是 5M,如果超过 5M,微信小程序就会认为是返回了大码,也就会报出大码错误。
npm install crypto-js
import CryptoJS from 'crypto-js'
// 定义加/解密的 key
const initKey = 'Test-AES-CBC-128';
// 设置数据块长度
const keySize = 128;
//设置向量和服务端保持一致
const iv = "0abcdefghij7twhjm";
export const aesEncrypt = (data, key) => {
/
CipherOption, 加密的一些选项:
mode: 加密模式, 可取值(CBC, CFB, CTR, CTRGladman, OFB, ECB), 都在 CryptoJSmode 对象下
padding: 填充方式, 可取值(Pkcs7, AnsiX923, Iso10126, Iso97971, ZeroPadding, NoPadding), 都在 CryptoJSpad 对象下
iv: 偏移量, mode === ECB 时, 不需要 iv
返回的是一个加密对象
/
const cipher = CryptoJSAESencrypt(data, key, {
mode: CryptoJSmodeCBC,
padding: CryptoJSpadPkcs7,
iv: CryptoJSencUtf8parse(iv)
});
// 将加密后的数据转换成 Base64
const base64Cipher = cipherciphertexttoString(CryptoJSencBase64); //CryptoJSencBase64
consolelog('base64Cipher', base64Cipher)
// 处理 Android 某些低版的BUG
// const resultCipher = base64Cipherreplace('//+/g,\'-\'')replace(g,'_');
// 返回加密后的经过处理的 Base64
return base64Cipher;
}
/
解密函数
@param {string} encrypted - 加密的数据;
@param {string} key - 加密使用的 key
/
export const aesDecrypt = (encrypted, key) => {
// 先将 Base64 还原一下, 因为加密的时候做了一些字符的替换
// const restoreBase64 = encryptedreplace()replace(/_/g,'/');
// 这里 mode, padding, iv 一定要跟加密的时候完全一样
// 返回的是一个解密后的对象
const decipher = CryptoJSAESdecrypt(encrypted, key, {
mode: CryptoJSmodeCBC,
padding: CryptoJSpadPkcs7,
iv: CryptoJSencUtf8parse(iv)
});
// 将解密对象转换成 UTF8 的字符串
const resultDecipher = CryptoJSencUtf8stringify(decipher);
// 返回解密结果
return resultDecipher;
}
微信小程序(下面简称小程序)近些月来刷爆了我们这些程序猿们的圈子,可以说无数的程序猿磨刀霍霍,准备在这快蛋糕上杀出一片天地。那么作为前端开发人员,小程序开发和我们平常的开发有什么不同的地方呢?让我们一起来走进门里看看。 我们从下面几个方向来了解一下小程序的开发: 1/debug/wxadoc/dev/framework/structure/debug/wxadoc/dev/devtools/download/debug/wxadoc/dev/component/t=20161107) 组件的用法和标签一样,比如view组件< view>< / view>、text组件< text>< /view>。从写法上看起来和标签写法没什么区别,但是这些组件和标签最大的区别就是,组件本身设置了样式,比如icon组件: <view class="group"> <block wx:for="{{iconSize}}"> <icon type="success" size="{{item}}"></icon> </block> </view> 我们只需要使用icon组件,不需要去自己设置样式就可以得到对应的icon样式。 在日常小程序开发中,比较常用的组件有view和text,其中用的最多的就是view,view本身并没有默认太多的样式,只有一个display:block样式,所以在我看来view就类似于div,我们也就把它当作div来使用就行了,然后你就会发现布局的时候到处都是view~,就像下图: 满眼全是view这种写法不需要像html一样考虑语义、seo神马的,非常的简单粗暴~。 额外提一下text组件,text拥有view所没有的一个特性就是text组件内的文本可以被复制、可以被复制、可以被复制(重要的事情说三遍~)。如果你希望某段文本可以被复制,那么你只能使用text组件。同时需要注意的一点,text组件内部不能嵌套view组件!嵌套无效! 2/debug/wxadoc/dev/framework/view/wxsshtmlt=20161107 二、JS差异 虽然小程序的交互采用的是js的语法,但是最大的变化就在于小程序无法使用选择器获取到页面的某个'dom'(应该不叫dom),这也是我们前端人员需要思路转变的地方,以往我们习惯于获取某个dom,然后这个dom上绑定各种事件,同时对页面进行一些改变 *** 作,但是小程序并没有提供这种我们习惯的方法。 不能获取dom,也不能直接 *** 作dom,那我们该怎么写呢? 1 bind 和 catch bind和catch的作用从字面意思就可以大致猜出是用来绑定某些东西的,没错,这是小程序提供绑定事件的两个方法,而他们的区别在于bind不阻止冒泡,而catch阻止冒泡。小程序不提供获取dom的 *** 作,而是让我们直接将事件绑定写入到组件内,如下代码: <view id="tapTest" data-hi="WeChat" bindtap="tapName"> Click me! </view> 看到这大家可能发现了bind后面跟着一个tap,这个tap是什么东东? 2 tap tap其实就是一个事件,你可以理解为click,不过在手机端叫做tap,其它的事件还有:touchstart、touchmove、touchcancel、touchend、longtap。 bindtap=”tapName”组合起来就是绑定个tap事件,tapName则是对应的方法名,在这里需要注意一点,调用方法时不能够使用tapName(“txt”)这种形式来传参,小程序不支持。那么如果我们想要给方法传递一些参数该怎么做呢?接着往下看。 3event 我们先看一段代码: Page({ tapName: function(event) { consolelog(event) } }) 打印出来的结果: { "type":"tap", "timeStamp":895, "target": { "id": "tapTest", "dataset": { "hi":"WeChat" } }, "currentTarget": { "id": "tapTest", "dataset": { "hi":"WeChat" } }, "detail": { "x":53, "y":14 }, "touches":[{ "identifier":0, "pageX":53, "pageY":14, "clientX":53, "clientY":14 }], "changedTouches":[{ "identifier":0, "pageX":53, "pageY":14, "clientX":53, "clientY":14 }] } 看到这么一堆东西大家可能有点晕,没事,我们来捋一捋。这个event想来大家应该明白是什么,event包含了目标对象的相关信息。那意味着,我们只要去修改目标对象的相关信息,就可以给tapName方法传输参数了。 那么如何修改目标对象的相关信息呢?在这之前我们必须要先了解下currentTarget和target两个属性,前者是绑定事件的组件,后者是触发事件的组件源。理解清楚这两个属性很重要!如果是上面例子这种情况,只有一个view组件,那么这两个属性的值没什么区别,但是如果换成下面的这个例子,就不一样了: <view id="tap1" data-hi="绑定组件" bindtap="tapName"> <view id="tap2" data-hi="触发组件源"></view> </view> 我们再输出看看(为了方便对比,只保留下currentTarget和target两个属性): { "target": { "id": "tap2", "dataset": { "hi":"触发组件源" } }, "currentTarget": { "id": "tap1", "dataset": { "hi":"绑定组件" } } } 通过这个例子就可以很清楚的发现,currentTarget对应的就是外层绑定了tapName方法的view组件,而target对应的则是内部的view组件。 通过两个例子,相信大家也注意到了两个属性,data-hi和dataset,这两个属性有什么关系呢?大家应该猜到了,dataset的值其实就是我们设置的data-xxx的值,而xxx则是dataset里面的key。大家对于data-xxx的写法应该不陌生,就是html中常见的自定义属性的写法,而在小程序中,则被用来传参。 4 改变样式 前面就提到了小程序并不提供获取和 *** 作dom的能力,这就又带来了一个问题,我们如何去动态的改变样式呢?我们先看下例子: <view class="container" style="overflow: {{screenType'hidden':'scroll-y'}}" bindtap="bindType"> Page({ data: { screenType: '' }, bindType: function(){ thissetData({ screenType: '1' }) } })</view> 大家是不是有点明白了呢,我们没有办法直接获取dom然后去改变他的样式,所以我们只能通过data里的属性来控制样式的变化,如上面的代码,overflow的值取决于screenType的值是否存在,如果存在,则overflow: hidden,反之overflow: scroll-y;那么我们只需要改变screenType的值。要改变screenType的值也简单了,小程序提供了thissetData方法,可以设置data内的值。 四、其它 最后提一下我们熟悉的ajax请求,在小程序里,它不叫ajax,而叫做wxrequest。用法和ajax没什么区别,唯一需要特别注意的是,请求必须是>
以上就是关于求一WEB 小程序,JAVASCRIPT写 在网页上第一行显示今天是星期几 第二行显示当前时间全部的内容,包括:求一WEB 小程序,JAVASCRIPT写 在网页上第一行显示今天是星期几 第二行显示当前时间、小程序开发-基础-html+css、JAVA设计一个用户注册的小程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)