需求场景:左边输入框输入内容,右边输入框用placeholder展示,当placeholder的内容宽度超过右边输入框的宽度时,placeholder强行替换为“请选择”

注意事项:1、左右输入框的大小、样式都无关;

2、实际业务中右边输入框的大小样式是随机的,所以示例代码中右边输入框加了左右不等的内边距,并且监听了浏览器窗口大小的变化,而具体的业务开发时右边输入框的大小是随机确定的,大小一般不会变化,所以无需监听浏览器窗口大小改变事件。

完整的示例代码:

<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta http-equiv="X-UA-Compatible" content="ie=edge" /><title>Document</title><style type="text/css">input {border: 1px solid gray;width: 20%;}#input2{padding-left: 10px;padding-right: 2px;width: 20%;}</style>
</head>
<body><input id='input1' type="text" name="title" oninput="onc()" /><input id='input2' type="text" name="userInput"><script>function textSize(fontSize,fontFamily,text){var span = document.createElement("span");span.id = 'referenceSpan'var result = {};result.width = span.offsetWidth;result.height = span.offsetHeight;span.style.visibility = "hidden2";span.style.fontSize = fontSize;span.style.fontFamily = fontFamily;span.style.display = "inline-block";var isExists = document.getElementById("referenceSpan");if (isExists) {document.body.removeChild(isExists);}document.body.appendChild(span);if(typeof span.textContent != "undefined"){span.textContent = text;}else{span.innerText = text;}result.width = parseFloat(window.getComputedStyle(span).width) - result.width;result.height = parseFloat(window.getComputedStyle(span).height) - result.height;document.body.removeChild(span);return result;}window.onc = function onchange(){let input1 = document.getElementById('input1');let input2 = document.getElementById('input2');let placeholder = '请选择' + input1.value;let cStyle = window.getComputedStyle(input2);let size = textSize(cStyle.fontSize,cStyle.fontFamily, placeholder);console.log(size.width, cStyle.width)if (size.width > parseFloat(cStyle.width)) {console.log("你输入的标题太长了",parseFloat(cStyle.width));input2.placeholder = '请选择';}else {input2.placeholder = placeholder;}}window.onresize = function(e){window.onc();}</script>
</body>
</html>

原生JS动态计算输入框文本内容的宽度,当内容宽度超过输入框的宽度时可控相关推荐

  1. 原生js动态为table追加html,JS动态添加Table的TR,TD实现方法

    本文实例讲述了JS动态添加Table的TR,TD实现方法.分享给大家供大家参考.具体实现方法如下: var tempRow=0; var maxRows=0; function insertRows( ...

  2. 移动端布局js动态计算rem

    rem原理: 其实rem布局的本质是等比缩放,一般是基于宽度,通过更改html元素的font-size字体大小,就可以让子元素实际大小发生变化 推荐一篇文章: https://segmentfault ...

  3. 原生JS动态创建html,实现瀑布流布局-

    首先在搭起一台服务器(请求数据用),新建文件夹,打开cmd npm init -y 初始化包配置文件 然后下载依赖包npm i mockjs express cors 源代码(服务端server.js ...

  4. js动态载入css文件,原生JS动态加载JS、CSS文件及代码脚本(示例代码)

    var DynamciLoadUtil = { // 动态加载外部js文件,并执行回调 loadJS: function(url, callback){ var script = document.c ...

  5. 原生js动态实现添加表格数据并某列求和

    <table width="600" border="1" cellspacing="0"><thead><t ...

  6. 原生js动态添加class

    在点击切换的过程中,我们需要给被选中的子选项添加"active",然后让其它子选项删除"active"名. 该怎么做呢? 首先,通过JS取到所有tab的节点 v ...

  7. Swift4 - 动态计算UITableView中tableHeaderView的高度 - 获取子控件高度和宽度

    核心 : /// 获取 子控件高度func sizeHeaderToFit(view:UIView) {view.setNeedsLayout()view.layoutIfNeeded()let wi ...

  8. 第148天:js+rem动态计算font-size的大小,适配各种手机设备

    需求: 在不同的移动终端设备中实现,UI设计稿的等比例适配. 方案: 布局排版都用rem做单位,然后不同宽度的屏,js动态计算根节点的font-size. 假设设计稿是宽750px来做的,书写css方 ...

  9. python爬虫爬取今日头条_Python爬虫实战入门五:获取JS动态内容—爬取今日头条...

    之前我们爬取的网页,多是HTML静态生成的内容,直接从HTML源码中就能找到看到的数据和内容,然而并不是所有的网页都是这样的. 有一些网站的内容由前端的JS动态生成,由于呈现在网页上的内容是由JS生成 ...

最新文章

  1. SSL介绍与Java实例
  2. python自动化--语言基础一数据类型及类型转换
  3. 使用Python增加csdn的访问量
  4. 原:开辟内存时,可以以结构体为单位,这样测试,是对的吧?
  5. boost::fibers::algo::shared_work >用法的测试程序
  6. 考究Hadoop中split的计算方法
  7. 用单片机测量流体流速的_流量测量的主要方法
  8. 知识图谱入门知识(五)【转】秒懂词向量Word2Vec的本质
  9. oracletns中不存在名称为_关于数据库:向SQL Developer添加新连接时未显示Oracle TNS名称...
  10. 淘宝嘉年华5元无门槛红包使用范围 怎么设置淘宝嘉年华5元无门槛红包
  11. 微信小程序:二维码生成器,输入信息生成二维码,调用相机扫描二维码,获取信息
  12. 大话GraphQL新手上车
  13. 浪潮服务器加速计算系统,超强AI计算系统囊括浪潮人工智能服务器
  14. 【Win 10 应用开发】MIDI 音乐合成——乐理篇
  15. 万豪酒店品牌进驻江苏盐城,持续华东区拓展
  16. jq查找div下的第二个span
  17. 水晶苍蝇拍(14):战胜人性,值得珍藏的投资感悟!
  18. 海思AI芯片(Hi35XX): 图像jpg转.bgr
  19. 盘一盘 Python 系列 - Sklearn
  20. 步进电机基础(6.2)-步进电机的特性测量方法-动态特性的测量法和步距角度精度的测量

热门文章

  1. zemax模拟ld_Zemax光学设计实例(83)在非序列模式下LD阵列的光束整形
  2. 客户端配置_交换机作为STelnet客户端登录其他设备配置示例
  3. webview 防止js注入_天台县js聚合物水泥防水涂料的作用
  4. awr报告分析 mysql_AWR报告的生成和简单分析方法
  5. linux 4.9 内核 nptl,【linuxThread和NPTL】
  6. java修改pdf内容流_java – 在PDFBox中,如何更改PDRectangle对象的原点(0,0)?
  7. 电脑入门完全自学手册_室内设计CAD施工图识读手册
  8. mybatis删除成功返回0_你还在用分页?试试 MyBatis 流式查询,真心强大!
  9. 怎么形容智能冰激凌机器人_有关于形容描写冰激凌的句子及图片
  10. 【转】正确认识动脉压力波形