javascript - Javascript中文本字段值更改时如何调用函数?
问题描述
当用户使用 Javascript(如果可能)在该文本字段中输入超过 17 个字符时,我想更改文本字段的宽度,否则通过任何其他方式。
我写了一个代码来做同样的事情,但是当用户在输入超过 17 个字符后单击文本字段外时,它只会改变宽度。我希望它在用户输入超过 17 个字符时自动更改宽度:
function widen() {
var value = nametf.value;
if (value.length > 17) {
nametf.style.width = '300px';
} else {
nametf.style.width = '200px';
}
}
#nametf {
width: 200px;
height: 20px;
padding: 5px 10px;
}
<title>TEXTFIELD TEST</title>
<form method="get" action="wwhome.php">
<input type="text" name="name1" id="nametf" onchange="widen()" value="" required>
</form>
解决方案
- 您需要使用
this
. 我也会将 on-change 更改为 on-key-up,因为 on-change 等待您将焦点从现场移开。
onkeyup="widen(this)"
- 然后你需要用你的变量“
nametf
”参数化函数
function widen(nametf) { // ... }
例子
function widen(nametf) {
var value = nametf.value;
if (value.length > 17) {
nametf.style.width = '300px';
} else {
nametf.style.width = '200px';
}
}
#nametf {
width: 200px;
height: 20px;
padding: 5px 10px;
}
<title>TEXTFIELD TEST</title>
<form method="get" action="wwhome.php">
<input type="text" name="name1" id="nametf" onkeyup="widen(this)" value="" required>
</form>
更好的方法是使用em
单位来扩展基于当前值的文本。
initExpandingFields();
function initExpandingFields() {
Array.from(document.querySelectorAll('.expanding-field')).forEach(field => {
field.addEventListener('keyup', onFieldChange);
});
}
function onFieldChange(e) {
let field = e.target,
len = field.value.length;
field.style.width = (len * 0.667) + 'em';
}
#nametf {
width: 200px;
height: 20px;
padding: 5px 10px;
}
<title>TEXTFIELD TEST</title>
<form method="get" action="wwhome.php">
<input type="text" class="expanding-field" name="name1" id="nametf" value="" required>
</form>
推荐阅读
- python - 如何将 for 循环中的元素打印到列表中?
- lua - lua和javascript之间的不同数字浮点数
- powershell - 如何使用 PowerShell 在 Windows 2008 R2 中获取脱机群集物理磁盘资源的磁盘编号
- join - 如果值存在,使用 linux join 命令更新文本文件中的字段
- docker - 如何让 Laravel 和 Lumen 项目同时使用 Docker 同时运行?
- bash - 满足条件时不需要增加循环
- ruby-on-rails - 我可以在没有 Gemfile 的情况下部署 rails 项目吗
- sql - SQL Server 存储过程的烦恼
- ios - 如何使 UITabBaItem 的图像和文本水平(并排)?
- node.js - 为什么控制台显示 Undefined ???