根据我的经验,input type="text" onchange事件通常只发生在你离开(模糊)控件之后。

有办法迫使浏览器触发onchange每次文本字段内容的变化?如果不是,那么“手动”跟踪这种情况的最佳方法是什么?

使用onkey* events是不可靠的,因为您可以右键单击字段并选择粘贴,这将在没有任何键盘输入的情况下更改字段。

setTimeout是唯一的方法吗?丑:-)


当前回答

方法一:为输入添加事件监听器:

element.addEventListener("input", myFunction);

 

方法2:用JavaScript定义oninput属性:

element.oninput = function()
{
    myFunction();
};

 

方法3:用HTML定义oninput属性:

<input type="text" oninput="myFunction();">

其他回答

如果你只使用Internet Explorer,你可以使用这个:

<input type="text" id="myID" onpropertychange="TextChange(this)" />

<script type="text/javascript">
    function TextChange(tBox) {
        if(event.propertyName=='value') {
            //your code here
        }
    }
</script>

希望这能有所帮助。

方法一:为输入添加事件监听器:

element.addEventListener("input", myFunction);

 

方法2:用JavaScript定义oninput属性:

element.oninput = function()
{
    myFunction();
};

 

方法3:用HTML定义oninput属性:

<input type="text" oninput="myFunction();">

更新:

参见Another answer(2015)。


2009年原文答案:

你想让onchange事件触发按下键,模糊和粘贴?这是魔法。

如果你想在他们输入时跟踪更改,使用"onkeydown"。如果你需要用鼠标捕捉粘贴操作,请使用“onpaste”(IE, FF3)和“oninput”(FF, Opera, Chrome, Safari1)。

在Safari上<textarea>破碎。使用textInput代替

要跟踪每一个,请尝试这个示例,并在此之前将光标闪烁率完全降低到零。

< body > -试试onkeydown、onkeyup onkeypress <输入类型=“文本”“> <跨越> < /跨越> < >脚本 我的功能(瓦尔) /警报(val); var mySpan =文档. getelementsby mySpan += val+"<br>"; 文件。getElementsByTagName(“跨越”)[0 - 9]。内html = mySpan; 的 剧本< - > < / body >

Onblur:退出时生成事件

Onchange:如果在输入文本中做了任何更改,则在退出时生成事件

Onkeydown:在任何按键时产生事件(对于长时间按住键也一样)

Onkeyup:在任何密钥释放时生成事件

Onkeypress:与onkeydown(或onkeyup)相同,但不会对ctrl,backsace,alt其他做出反应

我认为在2018年最好使用输入事件。

-

正如WHATWG规范所描述的(https://html.spec.whatwg.org/multipage/indices.html#event-input-input):

当用户更改值时向控件触发(参见 改变事件)

-

下面是一个如何使用它的例子:

<input type="text" oninput="handleValueChange()">