2023-03-17 14:21:58
50
今天在做开发的时候,遇到了一个比较奇葩的情况,有一个表单,里面有多个input,大家都知道默认的input都是带有自动填充的功能的,之前项目一直运行的挺好,后来莫名奇妙的这个表单里其中一个input的自动填充就不能用了,后来我检查了一遍,因为在我的记忆里,这个页面的前端我没动过,但是就是莫名奇妙的这个input不能自动填充了,后来百度了一会,发现搜出来的结果都是说怎么禁止让浏览器自动填充,没一个是我需要的回答,然后autocomplete autocomplete="on" 也都试了,name值也是有的,就是不出来看,这就给我整郁闷了,然后各种qq群问也没个正经的回答,最后一赌气直接从数据库查吧,也希望知道原因的大佬指点指点我qq:1687105521
然后也顺便分享一下从数据库获取上一条数据的思路吧!
因为要模拟正常浏览器自动填充的效果,所以做完这个感觉前端还挺有意思的,主要是用的jq,vue的大佬就别看了。
// 因为商品名称input死活不能自动填充所以从后台获取
let titleInput = $('input[name="title"]')
, titleHistory = $('.title-history')
, titleHistoryText = $('.title-history-text')
, ogTitle = titleInput.val();
if (!ogTitle){
// 获得焦点时
titleInput.on('focus', function (){
if (!titleInput.val()){
$.post("{:url('manage/Aut/getLastTitleByUID')}", {}, function (res){
if (res.code === 200){
titleHistory.show();
titleHistoryText.html(res.data.title);
}
})
}
});
titleHistoryText.on('click', function (){
let text = $(this).html();
titleInput.val(text);
});
// 正在输入时
titleInput.on('input', function (){
titleHistory.hide();
});
// 失去焦点时
titleInput.on('blur', function (){
setTimeout(function (){
titleHistory.hide();
}, 300);
});
}else{
titleHistory.hide();
}这里有意思的一点是,因为模拟浏览器自动填充的效果,所以当我们点击下拉框中的值之后,下拉框要立即隐藏,所以我在blur监听的时候是直接执行隐藏操作的,但是这样就不能监听到点击这个操作,意思就是,失去焦点和点击监听是有冲突的,所以我在失去焦点的监听时,做了一个300毫秒的延时隐藏,因为你立即隐藏的话就相当于你这个dom已经隐藏掉了,所以你根本点击不到这个dom,所以你就监听不到这个点击事件,这样延时隐藏后,这个点击就能被监听到了,后面的操作就简单了直接将值赋值到input里,好了今天就分享到这里!