纯 JavaScript 侦听输入值的变化
Pure JavaScript listen to input value change
有没有办法创建一个侦听输入的常量函数,这样当输入值发生变化时,会立即触发某些东西?
我正在寻找使用纯JavaScript的东西,没有插件,没有框架,我无法编辑HTML。
例如:
当我更改输入MyObject
中的值时,此函数将运行。
这就是事件的用途。
HTMLInputElementObject.addEventListener('input', function (evt) {
something(this.value);
});
作为一个基本的例子...
.HTML:
<input type="text" name="Thing" value="" />
脚本:
/* Event listener */
document.getElementsByName("Thing")[0].addEventListener('change', doThing);
/* Function */
function doThing(){
alert('Horray! Someone wrote "' + this.value + '"!');
}
这里有一个小提琴:http://jsfiddle.net/Niffler/514gg4tk/
实际上,勾选的答案完全正确,但答案可以是ES6
形状:
HTMLInputElementObject.oninput = () => {
console.log('run'); // Do something
}
或者可以这样写:
HTMLInputElementObject.addEventListener('input', (evt) => {
console.log('run'); // Do something
});
默认用法
el.addEventListener('input', function () {
fn();
});
但是,如果你想在通过JavaScript手动更改输入值时触发事件,你应该使用自定义事件(任何名称,如'myEvent'、'ev'等)。如果您需要侦听表单"更改"或"输入"事件,并且通过JavaScript更改输入值,则可以将自定义事件命名为"更改"或"输入",它也可以工作。
var event = new Event('input');
el.addEventListener('input', function () {
fn();
});
form.addEventListener('input', function () {
anotherFn();
});
el.value = 'something';
el.dispatchEvent(event);
创建和触发事件
2021 年的另一种方法可能是使用 document.querySelector()
:
const myInput = document.querySelector('input[name="exampleInput"]');
myInput.addEventListener("change", (e) => {
// here we do something
});
HTML表单输入包含许多事件。从 HTML 中引用,在侧边栏上转到"事件"菜单并将其展开。您将看到许多有用的事件,例如beforeinput
、change
、copy
、cut
、input
、paste
和拖放事件。
iput
change
beforeinput
和 input
事件在键入表单输入值时按顺序触发。
当表单输入值发生更改并且您失去对该输入的关注时,将触发 change
事件。
剪切、复制和粘贴
剪切(键盘快捷键上的 CTRL + X)输入值时,将触发cut
、beforeinput
input
事件。复制(键盘快捷方式上的 CTRL+C)时,将单独触发 copy
事件。
从剪贴板粘贴值(键盘快捷键上的 Ctrl + V)时,将触发paste
、beforeinput
input
事件。
JavaScript 更改值
要通过 JavaScript 更改输入值并使重要事件正常工作,您需要按顺序至少调度两个事件。一个是input
,两个是change
。这样您就可以将代码的重点放在侦听input
或change
事件上。这样更容易。
下面是所有示例代码。
(() => {
let inputText = document.getElementById('text');
let submitBtn = document.getElementById('submit');
let triggerJSBtn = document.getElementById('button');
submitBtn.addEventListener('click', (event) => {
event.preventDefault(); // just prevent form submitted.
});
triggerJSBtn.addEventListener('click', (event) => {
const thisTarget = event.target;
event.preventDefault();
inputText.value = thisTarget.innerText;
inputText.dispatchEvent(new Event('input'));
inputText.dispatchEvent(new Event('change'));
});
inputText.addEventListener('beforeinput', (event) => {
const thisTarget = event.target;
console.log('beforeinput event. (%s)', thisTarget.value);
});
inputText.addEventListener('input', (event) => {
const thisTarget = event.target;
console.log('input event. (%s)', thisTarget.value);
});
inputText.addEventListener('change', (event) => {
const thisTarget = event.target;
console.log('change event. (%s)', thisTarget.value);
});
inputText.addEventListener('cut', (event) => {
const thisTarget = event.target;
console.log('cut event. (%s)', thisTarget.value);
});
inputText.addEventListener('copy', (event) => {
const thisTarget = event.target;
console.log('copy event. (%s)', thisTarget.value);
});
inputText.addEventListener('paste', (event) => {
const thisTarget = event.target;
console.log('paste event. (%s)', thisTarget.value);
});
})();
/* For beautification only */
code {
color: rgb(200, 140, 50);
}
small {
color: rgb(150, 150, 150);
}
<form id="form">
<p>
Text: <input id="text" type="text" name="text">
</p>
<p>
Text 2: <input id="text2" type="text" name="text2"><br>
<small>(For lost focus after modified first input text so the <code>change</code> event will be triggered.)</small>
</p>
<p>
<button id="submit" type="submit">
Submit
</button>
<button id="button" type="button">
Trigger JS to set input value.
</button>
</p>
<p>Press F12 to view results in your browser console.</p>
</form>
请按 F12 打开浏览器的控制台并在那里查看结果。
每次用户输入某个值时,请执行某些操作。
var element = document.getElementById('input');
element.addEventListener('input', function() {
// Do something
});
我直言,这只是"onchange"被误认为是"oninput",这是两回事。
键下、键和输入是在输入更改时立即触发的事件。
我会使用键下或输入事件从输入框中获取更改的值。
const myObject = document.getElementById('Your_element_id');
myObject.addEventListener('keydown', function (evt) {
// Your code goes here
console.log(myObject.value);
});
每次键盘上击键时监视更改。
const textarea = document.querySelector(`#string`)
textarea.addEventListener("keydown", (e) =>{
console.log('test')
})
而不是 id,使用 title 来标识您的元素并编写如下代码。
$(document).ready(() => {
$("input[title='MyObject']").change(() => {
console.log("Field has been changed...")
})
});
- 如何将(a*b)两个输入文本值相乘,并在javascript中随文本变化动态显示
- 如何在呈现页面后使用 Java 脚本检测 dom 元素值的值是否有任何变化(例如,任何输入或复选框值更改)
- ng变化不会'除非我输入了有效的电子邮件地址,否则我不会因为输入电子邮件而被解雇
- jquery ui:检测输入中的首次时间变化
- 输入值偶尔变化
- 基于自身输入变化的角度验证输入
- 简化 jQuery 以检测输入值的变化
- HTML5 范围输入值在引导弹出窗口中没有变化
- 根据输入数量(数量)变化计算价格
- 流星“变化”值在释放鼠标时出现,而不是在拖动输入滑块时出现
- Javascript 不会检查文本输入值是否随组合网格而变化
- 两个按钮,可随背景位置变化而切换,并在输入中显示结果
- 纯 JavaScript 侦听输入值的变化
- AngularJS,如何使两个输入字段'每当它们动态变化时,s的和总是等于第三个输入
- 如何让经典的ASP表单识别输入中的变化
- 倾听单个输入的变化
- Rails3/随着输入的变化而动态地重新计算字段
- ng变化不会't在数字输入类型上触发
- 立即检测输入[类型=“文本”]的变化
- Jquery:计算实时表单输入,它也会随着复选框的变化而变化