【需求】实现当手机号已填写和协议已勾选时,“立即登录”按钮变亮,按钮可点击;若有一个不满足,按钮置灰,不可点击;实现获取短信验证码,倒计时提示操作;对不满足要求内容进行toast弹窗提示。

<view class="container">
<!--手机号-->
<view class="section">
<text class="txt">手机号</text>
<input value="{{mobile}}" placeholder-class="placeholder" placeholder="11位手机号码" type="number" maxlength="11"
bindinput="mobileInput"/>
</view>
<!--图片验证码-->
<view class="section">
<view>
<text class="txt">图形验证码</text>
<input placeholder-class="placeholder" placeholder="输入图形验证码" type="text" maxlength="4"
bindinput="imgCaptchaInput"/>
</view> <image class="imgBtn" src="{{imgCodeSrc}}" bindtap="getImgCode"></image>
</view>
<!--短信验证码-->
<view class="section">
<view>
<text class="txt">验证码</text>
<input placeholder-class="placeholder" placeholder="输入验证码" type="number" maxlength="6"
bindinput="smsCaptchaInput"/>
</view> <view class="smsBtn" bindtap="getSMS">{{captchaText}}</view>
</view> <view class="agree" style="margin-top:40rpx">
<checkbox-group bindchange="checkboxChange">
<checkbox class="check" value="1" checked="true" bindchange="checkboxChange"></checkbox>
</checkbox-group>
<span>已阅读并同意</span> <text style="color:#98c7ff" bindtap="xieyi">《用户使用协议》</text>
</view>
<view class="regist {{phoneAll&&checkAgree?'active':''}}" bindtap="regist">立即登录</view>
</view>
<!--mask-->
<view class="toast_mask" wx:if="{{isShowToast}}"></view>
<!--以下为toast显示的内容-->
<view class="toast_content_box" wx:if="{{isShowToast}}">
<view class="toast_content">
<view class="toast_content_text">
{{toastText}}
</view>
</view>
</view>

js

// 获取全局应用程序实例对象
const app = getApp() Page({
data: {
//toast默认不显示
isShowToast: false,
mobile: '',
imgCode: '',
code: '',
// inviteCode: '',
errorContent: '请输入手机号',
timer: 60,
captchaText: '获取验证码',
captchaSended: false,
isReadOnly: false,
capKey: '',
sendRegist: false,
imgCodeSrc: '',
phoneAll: false,
checkAgree:true,
checkboxValue:[1],
},
// 显示弹窗
showToast(txt, duration = 1500) {
//设置toast时间,toast内容
this.setData({
count: duration,
toastText: txt
});
var _this = this;
// toast时间
_this.data.count = parseInt(_this.data.count) ? parseInt(_this.data.count) : 3000;
// 显示toast
_this.setData({
isShowToast: true,
});
// 定时器关闭
setTimeout(function () {
_this.setData({
isShowToast: false
});
}, _this.data.count);
},
// 双向绑定mobile
mobileInput(e) {
this.setData({
mobile: e.detail.value
}); if(this.data.mobile.length===11){
this.setData({
phoneAll: true
});
}else if(this.data.mobile.length<11){
this.setData({
phoneAll: false
});
}
},
// 双向绑定img验证码
imgCaptchaInput(e) {
this.setData({
imgCode: e.detail.value
});
},
// 双向绑定sms验证码
smsCaptchaInput(e) {
this.setData({
code: e.detail.value
});
},
// 同意协议
checkboxChange(e) {
this.data.checkboxValue = e.detail.value;
if(this.data.checkboxValue[0]==1){
this.setData({
checkAgree: true
});
}else {
this.setData({
checkAgree: false
});
}
},
// 获取短信验证码
getSMS() {
var that = this.data; if (!that.mobile) {
this.showToast('请输入手机号');
} else if (that.mobile.length != 11 || isNaN(that.mobile)) {
this.showToast('请输入正确手机号');
}
else if (that.imgCode.length != 4) {
this.showToast('请输入正确图片验证码');
}
else {
if (that.captchaSended) return;
this.setData({
captchaSended: true
})
app.api.getSMSByMobileAndCaptcha({
mobile: that.mobile,
capKey: that.capKey,
code: that.imgCode,
type:1 }).then((result) => {
this.showToast(result.message);
if (result.code != 1) {
this.getImgCode();
this.setData({
captchaSended: false,
});
} else {
var counter = setInterval(() => {
that.timer--;
this.setData({
timer: that.timer,
captchaText: `${that.timer}秒`,
isReadOnly: true
});
if (that.timer === 0) {
clearInterval(counter);
that.captchaSended = false;
that.captchaText = '获取验证码';
this.setData({
timer: 60,
captchaText: '获取验证码',
captchaSended: false
})
}
}, 1000);
}
});
}
},
// 获取图形码
getImgCode() {
var capKey = "zdx-weixin" + Math.random();
this.setData({
imgCodeSrc: "http://prezdx.geinihua.com/invite/WeChat/verify?capKey=" + capKey,
capKey: capKey
});
},
//用户使用协议
xieyi() {
wx.navigateTo({
url: '../userXieyi/userXieyi'
}) },
// 注册
regist() {
var that = this.data;
if(!that.checkAgree||!that.phoneAll){
return
}
// sessionCheck为1,目的是防止微信code码先于session过期
var code = wx.getStorageSync('wxCode');
var sessionCheck = wx.getStorageSync('sessionCheck'); wx.setStorageSync('mobile',that.mobile); if (!that.mobile) {
this.showToast('请输入手机号');
} else if (that.mobile.length != 11 || isNaN(that.mobile)) {
this.showToast('请输入正确手机号');
} else if (that.code.length != 6) {
this.showToast('请输入正确验证码');
} else {
wx.showLoading({
title: '加载中...',
});
app.api.loginByCaptcha({
mobile: that.mobile,
smsCode: that.code,
code: code,
sessionCheck:sessionCheck,
}).then((res) => {
wx.hideLoading();
if (res.code == 2||res.code==1) {
//注册成功
wx.setStorageSync('token', res.businessObj.token);
wx.setStorageSync('userId',res.businessObj.userId);
this.sucessCb(res);
app.globalData.isLogin = true; //设置为登录成功
} else {
this.showToast(res.message);
}
});
}
},
// 成功回调
sucessCb(res) {
wx.redirectTo({
url: '/pages/index/index'
})
},
onLoad: function () {
this.getImgCode();
var that=this;
if(wx.getStorageSync('mobile')){
that.setData({
mobile: wx.getStorageSync('mobile'),
})
}
if(this.data.mobile.length===11){
this.setData({
phoneAll: true
});
} }, })

小程序根据input输入,动态设置按钮的样式的更多相关文章

  1. 微信小程序中input标签高度设置

    如果没有设置高度所以显示的是控件自身的高度. 微信小程序input控件原始设置: 上图发现: 我只覆盖了官方input的height,而没有覆盖min-height; .query input{ bo ...

  2. 微信小程序:input输入框和form表单几种传值和取值方式

    1.传值:index下标传值.页面navigator传值 1.index下标 实现方式是:data-index="{{index}}"挖坑及e.currentTarget.data ...

  3. python学习笔记(2)——练习小程序之 " input " 隐藏陷阱

    练习小程序之 ----------" input " 隐藏陷阱 age=input('please enter your age:') if age>=18: print(' ...

  4. 【小程序】---- input获得焦点时placeholder重影BUG

    问题小程序的input组件有个自身的bug,即当输入框获取焦点时placeholder内容会出现重影现象. 解决思路原理:将placeholder内容单独写在另外的标签里,控制其显示隐藏.操作:将代表 ...

  5. 微信小程序 修改(自定义) 单选/复选按钮样式 checkbox/radio样式自定义

    参考文章: 微信小程序 修改(自定义) 单选/复选按钮样式 checkbox/radio样式自定义

  6. Vue.之. 动态设置按钮Disabled

    Vue.之. 动态设置按钮Disabled 按钮代码如下: 添加了一个 属性      :disabled="isAble"  ,控制:更新按钮.重置按钮 <el-form- ...

  7. JavaScript动态设置div的样式的方法

    有时候需要根据需要动态设置div的样式,当然对于稍有经验的javascript开发者来说,这一切都是那么的简单,但是对于初学者或者说没有相关经验的开发者来说可能就是一个不大不小的难关,下面就通过实例简 ...

  8. 小程序中input设置宽度后宽度还有空间,但是placeholder被遮挡问题

    最近在做小程序,已经设置了宽高,placeholder没有超出input宽度,却被挡住了一部分,上代码看一下: wxml: <view class='container'> <inp ...

  9. 微信小程序底部实现自定义动态Tabbar

    多图警告!!! 最近在工作中遇到这样一个需求:微信小程序底部的Tab需要通过判断登录人的角色动态进行改变,想要实现这个功能依靠小程序原生的Tabbar是不可能实现的了,所以研究了一下自定义Tab,这里 ...

随机推荐

  1. struts2官方 中文教程 系列十:Form标签

    介绍 在本教程中,我们将探索其他Struts 2表单控件.在前面的教程中,我们介绍了如何使用Struts 2表单(处理表单.表单验证和消息资源文件),我们介绍了如何使用Struts 2 head, f ...

  2. Java常考面试题

    Java常考面试题 1. 什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? 答:Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行 ...

  3. C# List集合去重操作注意点

    今天调试代码时发现list的distinct方法在对引用类型操作时并没有去重,后来查阅资料发现list去重操作对象集合时比较的是对象的一个个引用地址, 因为集合里的对象都是一个个单独的实例,所以并不会 ...

  4. Linux-Shell脚本编程-学习-2-Linux基本命令

    接上篇,接着学习Linux下的部分命令,后面的这些命令用到的频率可能没有那么多,不过也是经常需要的. 第一部分:程序监测部分,ps和top top命令可能比较眼熟,所以我们先说ps ps命令最烦人了, ...

  5. Qt 飞机仪表显示

    使用Qt简单谢了一个飞机的一小部分仪表,还没有写完,目前只写了一个界面,不过思想应该是一样的. 效果图如下 其中主要由转速表,和下面的部分数字显示构成 转速表代码 .h文件 #ifndef CONTR ...

  6. Jmeter从文件中读取参数值

    1. 通过函数助手,从本地文件中取值选项->函数助手对话框->选择__CSVRead函数->调用参数其中,函数助手对话框中,第一栏填写本地文件所在地址,第二栏写需要入参的值,有点类似 ...

  7. MySQL性能分析和优化-part 1

    MySQL性能优化 平时我们在使用MySQL的时候,怎么评估系统的运行状态,怎么快速定位系统瓶颈,又如何快速解决问题呢? 本文总结了多年来MySQL优化的经验,系统介绍MySQL优化的方法. OS性能 ...

  8. 【leetcode】19. 删除链表的倒数第N个节点

    描述 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变 ...

  9. wampserver 安装后 启动失败的解决方法

    安装后启动, 显示 发生未知的异常 wampmanager.exe  .... 解决方法 === 其实下载页面说了,先下载 vc的运行库,页面上有链接, 他给的是vc10的,我按照做,失败 查了无数资 ...

  10. 超像素 superpixels 是什么东西

    毕业设计要做图像分割 识别什么的. 看论文看到 superpixels 开始脑补是  像素插值算出来的 后来越看越不想,搜索发现根本是另外一回事 http://blog.sina.com.cn/s/b ...