当Javascript中的文本字段值更改时如何调用函数?

问题描述 投票:0回答:3

当用户使用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>
javascript html css function dom
3个回答
0
投票

onchange在输入失去焦点时被激活,这就是为什么当您单击外部时它可以工作的原因。另一方面,当值更改时,oninput将立即触发:

const nametf = document.getElementById('nametf');
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;
}
<html>
<form method="get" action="wwhome.php">
  <input type="text" name="name1" id="nametf" oninput="widen()" value="" required>
</form>
</html>

0
投票
  1. 您需要使用this将自引用传递给该函数。我也会将“ on-change”更改为“ on-key-up”,因为on-change会等待您将焦点移离该字段。
onkeyup="widen(this)"
  1. 然后您需要使用变量“ nametf”对函数进行参数化] >>
  2. 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>

0
投票

尝试一下:

© www.soinside.com 2019 - 2024. All rights reserved.