这是个新手问题,在之前开始写小程序项目时遇到,特此记录给有需要的人
首先,代码
<view class="pswV">
<image class="icon-user" src="../icon/psw.png"></image>
<image class="icon-seepsw" src="{{seePswImg}}" bindtap="isSeePsw"></image>
<input id="2" class="inputBox pswBox" type="{{passwordType}}" value="{{passWord}}" bindinput="inputPassword" bindfocus="focusPassword"
bindblur="blurpassword" placeholder="{{pswPlacholder}}" maxlength="16" />
</view>
我将输入框和图标放在同一个view里,使用微信中的data数据绑定了输入框的数据类型,然后通过css设置其相对位置,效果如图(使用absolute属性,这里代码乱就不贴了,比较简单):
看箭头处是我需要添加的隐藏展示密码图标
图标放在了input框内,即重叠,使用absolute属性,然后避免不能点击图标,设置了图标的z-index属性(简单可理解为图层级,越大在越上面)
后面发现如果是将图标直接和输入框放入一个view中,会点击不了
放好图片自然设置了图标的点击事件(isSeePsw):
//密码可见性
isSeePsw: function() {
var that = this;
var type = that.data.passwordType;
var query = wx.createSelectorQuery('#2')
if (type == 'text') {
that.setData({
passwordType: 'password',
seePswImg: '../icon/eyeclose.png'
})
query.focus()
}else {
that.setData({
passwordType: 'text',
seePswImg: '../icon/eyeopen.png'
})
query.blur()
}
},
此方法是修改密码可见性,并且改变图标
发现点击图标时,虽然图标发生了改变,但是输入框内的密码并未随点击改变,思考了一下,微信动态加载的条件是某个数据发生修改,也就是说虽然我们把输入框的“type”属性修改了,可是并没有对输入框的内容进行操作,所以其是不会重新渲染的,故此我们加上一句:
谨记:只有数据重载才会重新渲染,否则就算把元素删除也不会重新渲染
而input的type算是一个比较奇葩的类,其实应该是将密码放入了内存中,显示的只是一个*或者.
passWord: that.data.passWord,
即把获取的输入框的密码,重新设置一次数据,作为更新,很简单的问题,特记