页面上input输入框宽度实现自动调整

2023-11-20

   input输入框宽度实现自动调整,本文介绍两种方式,一是通过获取input内容的宽度实现输入框宽度的自动调整;二是通过内容字符串的长度乘以文本字体大小的积,来实现输入框宽度的自动调整。

1、input输入框宽度的获取方式一

   由于input输入框中text文本的实际宽度不能直接获取,所以只能间接实现输入框宽度的自动调整(顺便说一句:input输入框的默认宽度和font-size、font-family有关)。具体思路是:先获取input的文本内容,然后创建预格式化的文本pre标签元素,将获取的文本内容放到pre元素里,再获取pre元素的宽度,根据获取的pre元素的宽度,进而改变input输入框的宽度,具体脚本如下(使用jQuery技术):

//获取文本宽度
let textWidth = function(text){
    text = text.replace(/\s/g, 's');// 半角空格转换为全角空格,或者替换为单个字母或者汉字都可以
    let preHTML = $('<pre>'+ text +'</pre>').css({display: 'none'});
    $('body').append(preHTML);
    let width = preHTML.width();
    preHTML.remove();
    return width;
};

2、input输入框宽度的获取方式二

   经测试也可以使用元素label和元素p结合的方式,实现input宽度的获取,代码如下:

let textWidth2 = function(text){
    text2 = text.replace(/\s/g,'s');// 半角空格转换为全角空格,或者用个汉字代替空格
    console.log('text2length:',text2.length);
    let pHTML = '<label for="" id="labels" style="display:inline-block;width:auto;box-sizing: content-box;"><p style="text-align:center;box-sizing: content-box;">'+ text2 +'</p></label>';
    $('body').append(pHTML);
    let width = $('#labels').width();
    $('#labels').remove();
    console.log('text-width',width)
    return width;
};

3、通过js事件实现输入框宽度变动

  接下来就是根据输入文本的增加或减少来调整输入框的宽度。在响应输入每个字符后宽度自动调整的事件有keydown、keyup、keypress、input、compositionend、compositionstart等,经测试,input在中英文输入都能实现宽度调整,keydown、keyup在中文输入时,根据浏览器版本和不同浏览器会有不同的反应。最好是input和keydown结合使用来实现宽度自动调整。具体代码如下:

//input宽度自适应
$("input").keydown( function(e){
    e.stopPropagation();
    $(this).width(textWidth2($(this).val()));
    console.log('keydown-width',$(this).width());

});
document.getElementById('aa').addEventListener('input', function(){
    console.log('input-width:',$('#aa').width());
    $('#aa').width(textWidth2($('#aa').val()));
});

4、input输入框宽度变动的另一种方式

  input输入框的宽度也可以根据输入文本的字符串的长度乘以文本字体大小来实现自动调整,具体代码如下:

//input宽度自适应
$("input").keydown( function(e){
    e.stopPropagation();
     $(this).width($(this).val().length*10);
     let widthP = $(this).val().length*getFontFamily(document.documentElement)*15/document.documentElement.clientWidth + 'rem';
     $(this).css('width',widthP);

});

5、完整案例代码如下

    font-size:.3rem;
    color:red;
}
</style>
</head>

<body>
<div>
<input type="text" placeholder="width auto change" id="aa">
    </div>

    <script type="text/javascript" charset="utf-8">
    // 获取浏览器默认字体
    function getFontFamily(elem) {
        var computedStyles = 'getComputedStyle' in window? window.getComputedStyle(elem):elem.currentStyle;
        // console.log('currentStyle',computedStyles);
        console.log('font-family',computedStyles['font-family']);
        console.log('font-size',computedStyles['font-size']);
        return computedStyles['font-size'].substring(0,computedStyles['font-size'].length-2);
    }
//获取文本宽度
let textWidth = function(text){
    text = text.replace(/\s/g, 's');// 半角空格转换为全角空格,或者替换为单个字母或者汉字都可以
    let preHTML = $('<pre>'+ text +'</pre>').css({display: 'none'});
    $('body').append(preHTML);
    let width = preHTML.width();
    preHTML.remove();
    return width;
};
getFontFamily(document.documentElement);
let textWidth2 = function(text){
    text2 = text.replace(/\s/g,'s');// 半角空格转换为全角空格,或者用个汉字代替空格
    console.log('text2length:',text2.length);
    let pHTML = '<label for="" id="labels" style="display:inline-block;width:auto;box-sizing: content-box;"><p style="text-align:center;box-sizing: content-box;">'+ text2 +'</p></label>';
    $('body').append(pHTML);
    let width = $('#labels').width();
    $('#labels').remove();
    console.log('text-width',width)
    return width;
};
//input宽度自适应
$("input").keydown( function(e){
    e.stopPropagation();
    // $(this).width($(this).val().length*10);
    // let widthP = $(this).val().length*getFontFamily(document.documentElement)*15/document.documentElement.clientWidth + 'rem';
    // $(this).css('width',widthP);
    $(this).width(textWidth2($(this).val()));
    console.log('keydown-width',$(this).width());

});
document.getElementById('aa').addEventListener('compositionstart', function(){
    console.log(this.value);
})
document.getElementById('aa').addEventListener('compositionend', function(){
    console.log('compositionend:',$('#aa').val());
    //$('#aa').width(textWidth2($('#aa').val()));
})
document.getElementById('aa').addEventListener('input', function(){
    console.log('input-width:',$('#aa').width());
    // $('#aa').width(textWidth2($('#aa').val()));
});
</script>
</body>

</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

页面上input输入框宽度实现自动调整 的相关文章

  • 按百分比设置 bootstrap 模态身高

    我正在尝试制作一个带有主体的模态 当内容变得太大时 该主体会滚动 但是 我希望模式能够响应屏幕尺寸 当我将最大高度设置为 40 时 它没有任何效果 但是 如果我将最大高度设置为 400px 它会按预期工作 但不会响应 我确信我只是错过了一些
  • 仅一页 JavaScript 应用程序

    您是否尝试过单页 Web 应用程序 即浏览器仅从服务器 获取 一页 其余部分由客户端 JavaScript 代码处理 此类 应用程序页面 的一个很好的例子是 Gmail 对于更简单的应用程序 例如博客和 CMS 使用这种方法有哪些优点和缺点
  • 在闪亮的数据表中为每个单元格显示工具提示或弹出窗口?

    有没有什么方法可以为 r闪亮数据表中的每个单元格获取工具提示 有很多方法可以获取悬停行或列 但我找不到一种方法来获取行和列索引并为每个单元格显示不同的悬停工具提示 任何人都可以修改以下代码吗 library shiny library DT
  • javascript中按tab键时如何调用函数?

    我有一个这样的功能 function whenEmpty field if field value field style backgroundColor ffcccc alert Please fill the field field f
  • iOS7 中“-webkit-overflow-scrolling: touch” 最初的屏幕外元素被破坏

    既然转基因种子已经发布了 我们现在可以谈谈了 看起来 iOS7 中的 webkit overflow scrolling touch 已损坏 最初不在屏幕上的元素的触摸事件不会触发 或者在某些情况下只是不可靠 这是一个例子
  • Google Chrome 106 可拖动导致元素消失

    使用拖放元素时 绝对定位元素中包含的大多数其他元素都会从屏幕上消失 如果我调整窗口大小 这些元素会出现 但在开始拖动时会再次消失 我在最新版本的 Google Chrome 106 和 Beta 版本 107 0 5304 18 以及现在的
  • 是否有任何非轮询方式来检测 DOM 元素的大小或位置何时发生变化?

    很长一段时间以来 我一直在寻找一种方法来检测 DOM 元素的大小或位置何时发生变化 这可能是因为窗口调整了大小 或者因为向该元素添加了新的子元素 或者因为在该元素周围添加了新元素 或者因为 CSS 规则已更改 或者因为用户更改了浏览器的字体
  • 如何在 Angular 中从父组件访问子组件?

    I have mat paginator在子组件a中 如下所示 子组件 html
  • Typeahead.js substringMatcher 函数说明

    我只是在做一些研究Typeahead js这是一个非常酷的图书馆 感谢文档 我已经成功地获得了一个基本的示例 该文档也非常好 但是我试图弄清楚以下代码块实际上在做什么 var substringMatcher function strs r
  • 如何使JavaScript函数在Eclipse“大纲视图”中可见?

    我有这样的代码 但如果它在匿名函数中定义 则无法打开函数大纲 类没有问题 我该如何概述something2 请分享一些提示 我可以将所有函数标记为构造函数 但这是无效的方法 start of track event required deb
  • JS用正则表达式替换数字

    我有元素的标识符 如下所示 form book 1 2 3 我想要的是用其他值替换该标识符中的第二个数字 我将函数 match 与以下正则表达式一起使用 var regexp d d d 但它返回我包含的数组 1 2 3 2 因此 当我尝试
  • 查询为空 Node Js Sequelize

    我正在尝试更新 Node js 应用程序中的数据 我和邮递员测试过 我的开发步骤是 从数据库 MySQL 获取ID为10的数据进行更新 gt gt 未处理的拒绝SequelizeDatabaseError 查询为空 我认识到 我使用了错误的
  • Select2 下拉列表动态添加、删除和刷新项目

    这让我发疯 为什么 Select2 不能在其页面上实现清晰的方法或示例如何在 Select2 上进行简单的 CRUD 操作 我有一个 select2 从 ajax 调用获取数据
  • 无法在前端使用 JavaScript Fetch API 将文件上传到 FastAPI 后端

    我正在尝试弄清楚如何将图像发送到我的 API 并验证生成的token那是在header的请求 到目前为止 这就是我所处的位置 app post endreProfilbilde async def endreProfilbilde requ
  • 如何在 Google 地图 V3 中创建编号地图标记?

    我正在制作一张上面有多个标记的地图 这些标记使用自定义图标 但我还想在顶部添加数字 我已经了解了如何使用旧版本的 API 来实现这一点 我怎样才能在V3中做到这一点 注意 当您将鼠标悬停在标记上时 标题 属性会创建一个工具提示 但我希望即使
  • Jquery - 通过在字符串中构建 id 的 id 获取元素

    我在使用 jquery 元素时遇到问题 我正在 var 中构造名称 例如 var myId myGotId myId attr title changed myId 返回空 我想通过 id 获取我的元素 但动态构建我的 Id 连接字符串 编
  • 三级十进制有序列表 CSS

    我有一个 html 中的三级有序列表 我想为其提供如下样式 1 Item 1 1 1 Item 2 1 1 1 Item 3 下一个 plunker 中有一个 html 示例 http plnkr co edit DqhZ5pJILTUHG
  • 显示覆盖以覆盖整个页面

    我有一个正在加载的网络应用程序iframe 我需要显示一个覆盖 div 来覆盖整个页面 问题是叠加层当前仅显示在iframe区域而不覆盖整个页面 我们的应用程序 子应用程序 是加载的一组应用程序的一部分iframe 你可以做这样的事情 di
  • 单击列表时使用 bootstrap Dropdown 防止下拉菜单消失

    我正在使用使用引导下拉菜单 http twitter github com bootstrap javascript html dropdowns生成下拉菜单 我想防止点击菜单时菜单消失 我已经实现了以下代码 但它不起作用 知道如何修复它吗
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没

随机推荐

  • 互补二元组

    时间限制 10000ms 单点时限 1000ms 内存限制 256MB 描述 给定N个整数二元组 X1 Y1 X2 Y2 XN YN 请你计算其中有多少对二元组 Xi Yi 和 Xj Yj 满足Xi Xj Yi Yj且i lt j 输入 第
  • 【试题】排列组合

    在写一个远程的代码 如果本地有M个显示器 远程有N个显示器 M lt N 依据分辨率 显示器刷新频率等要求 需要对远程的N个显示器进行最佳分辨率修改 之后 需要从N个远程显示器中选择M个 跟本地显示器进行一对一的匹配 即从 A N M N
  • 注意:怎么用JMeter操作MySQL数据库?看完秒懂!

    近期用JMeter做接口测试 遇到了一个需要用到数据数据库的场景 一个关于数据报告的页面 需要将数据库里面的数据求和或者取均值之后 展示出来 如果要断言的话 需要连接数据库 通过写sql语句 将sql查询结果与页面的结果进行对比 以MySQ
  • 微信pc端浏览器打开页面空白的问题

    今天写了一个web项目 用chrome浏览器 手机端微信你打开都没问题 但是在pc端微信打开后是空白的 于是我重新做了一个空白的vue项目 用pc端微信浏览器是可以打开的 慢慢调试发现是语法的问题 一步一步减去组件 再一步一步加上组件 最终
  • ubuntu运用软件和更新自动安装NVIDIA显卡驱动

    可能是我电脑硬件问题 直接运用软件和更新安装驱动 老是不能装成功 甚至装的系统都进不了 还要重装系统 这次重装系统后 我试着用软件和更新来自动安装驱动 一 secure boot修改为disable 1 首先进入终端输入 secure bo
  • error: (-209) The operation is neither ‘array op array‘ (where arrays have the same size and type)

    问题展示 error 209 The operation is neither array op array where arrays have the same size and type 错误原因 两个矩阵尺寸大小不一样 解决方法 指定
  • IDEA运行缓慢卡顿,解决idea卡顿,控制台中文乱码 以及其它常用设置

    IDEA运行缓慢卡顿 解决idea卡顿问题以及常用设置 IDEA卡顿原因 优化IDEA配置 重点推荐的方法 手动修改IDEA配置步骤 其他卡顿优化 参考 1 idea启动时会有两个快捷方式 2 卸载不需要用的插件 3 减少内存 4 适当关闭
  • HttpClient 简介说明

    转自 HttpClient 简介说明 下文笔者将讲述HttpClient框架的简介说明 如下所示 HttpCient简介说明 HttpClient是一个开源项目 它是Apache Jakarta Common下的一个子项目 HttpClie
  • Invalid Address specified to RtlValidateHeap

    Invalid Address specified to RtlValidateHeap VC编程 最后推出对话框的时候 会有错误提示声音 硄 但是没有弹出错误提示对话框 症状描述与下面的类似 声音就和Assertion Failure一样
  • html遍历数组,JS数组遍历的几种方式

    JS数组遍历 基本就是for forin foreach forof map等等一些方法 以下介绍几种本文分析用到的数组遍历方式以及进行性能分析对比 第一种 普通for循环 代码如下 for j 0 j lt arr length j 简要
  • 【三电平SVPWM学习

    导读 本期对三电平SVPWM的原理和建模做一个简单介绍 并与两电平SVPWM做了一个对比 后面把三电平的SVPWM运用到异步电机直接转矩控制中 看与传统的两电平SVPWM 控制性能是否得到改善 模型可分享 关注公众号 浅谈电机控制 留下邮箱
  • 八大排序算法(六)——优先队列、堆和堆排序

    6 1 API 优先队列是一种抽象数据类型 它表示了一组值和对这些值的操作 优先队列最重要的操作就是删除最大元素和插入元素 6 2 初级实现 6 2 1 数组实现 无序 或许实现优先队列最简单方法就是基于下压栈的代码 insert 方法的代
  • java通过文件路径读取该路径下的所有文件并将其放入list中

    java通过文件路径读取该路径下的所有文件并将其放入list中 java中可以通过递归的方式获取指定路径下的所有文件并将其放入List集合中 假设指定路径为path 目标集合为fileList 遍历指定路径下的所有文件 如果是目录文件则递归
  • 旋转链表(leetcode)

    61 旋转链表 给你一个链表的头节点 head 旋转链表 将链表每个节点向右移动 k 个位置 示例 1 输入 head 1 2 3 4 5 k 2 输出 4 5 1 2 3 示例 2 输入 head 0 1 2 k 4 输出 2 0 1 提
  • centos安装配置hadoop超详细过程(含故障排除)

    1 集群部署介绍 1 1 Hadoop简介 Hadoop是Apache软件基金会旗下的一个开源分布式计算平台 以Hadoop分布式文件系统 HDFS Hadoop Distributed Filesystem 和MapReduce Goog
  • 计算机科学丛书(2014-2018.Q1)

    ISBN 名称 作者 出版时间 978 7 111 53451 8 数学设计和计算机体系结构 原书第2版 美 戴维 莫尼 哈里斯 莎拉 L 哈里斯著 978 7 111 44075 8 嵌入式计算系统设计原理 美 Marilyn Wolf著
  • C#中string.Format输出内容中含有花括号的解决方法

    转载一篇 版权声明 本文为CSDN博主 九德真君 的原创文章 遵循CC 4 0 BY SA版权协议 转载请附上原文出处链接及本声明 原文链接 https blog csdn net lzdidiv article details 69469
  • python matrix用法_numpy中matrix使用方法

    matrix T transpose 返回矩阵的转置矩阵 matrix H hermitian conjugate transpose 返回复数矩阵的共轭元素矩阵 matrix I inverse 返回矩阵的逆矩阵 matrix A bas
  • 基于C语言实现的文件压缩算法-哈夫曼编码

    哈夫曼编码 是一种数据压缩算法 通常用于无损数据压缩 该算法是由 David A Huffman在麻省理工学院就读理学博士 Doctor of Science 的时候发明的 这位大佬在1952年发表了相关的一篇论文A Method for
  • 页面上input输入框宽度实现自动调整

    input输入框宽度实现自动调整 本文介绍两种方式 一是通过获取input内容的宽度实现输入框宽度的自动调整 二是通过内容字符串的长度乘以文本字体大小的积 来实现输入框宽度的自动调整 1 input输入框宽度的获取方式一 由于input输入