我正在尝试做一些实验。我想要发生的是,每次用户在文本框中键入内容时,它都会显示在对话框中。我使用onchange
事件属性来实现它,但它不起作用。我仍然需要按下提交按钮才能使其正常工作。我读到了关于AJAX的内容,我正在考虑了解这一点。我是否仍然需要AJAX才能使其工作或简单的JavaScript足够?请帮忙。
index.php
<script type="text/javascript" src="javascript.js"> </script>
<form action="index.php" method="get">
Integer 1: <input type="text" id="num1" name="num1" onchange="checkInput('num1');" /> <br />
Integer 2: <input type="text" id="num2" name="num2" onchange="checkInput('num2');" /> <br />
<input type="submit" value="Compute" />
</form>
javascript.js
function checkInput(textbox) {
var textInput = document.getElementById(textbox).value;
alert(textInput);
}
答案 0 :(得分:109)
onchange
仅在控件模糊时触发。请改为onkeypress
。
答案 1 :(得分:32)
使用.on('input'...
监控来自jQuery 1.7及更高版本的输入(粘贴,密钥等)的每个更改。
对于静态和动态输入:
$(document).on('input', '.my-class', function(){
alert('Input changed');
});
仅适用于静态输入:
$('.my-class').on('input', function(){
alert('Input changed');
});
JSFiddle with static / dynamic example:https://jsfiddle.net/op0zqrgy/7/
答案 2 :(得分:28)
检查击键只是部分解决方案,因为可以使用鼠标点击更改输入字段的内容。如果右键单击文本字段,则可以剪切和粘贴选项,以便在不进行击键的情况下更改值。同样,如果启用了自动填充,则可以左键单击一个字段并获取以前输入的文本的下拉列表,您可以使用鼠标单击从您的选项中进行选择。按键捕获不会检测到这些类型的更改。
可悲的是,至少据我所知,没有“onchange”事件立即报告更改。但是有一个适用于所有情况的解决方案:使用setInterval()设置计时事件。
假设您的输入字段的ID和名称为“city”:
<input type="text" name="city" id="city" />
有一个名为“city”的全局变量:
var city = "";
将此添加到您的页面初始化:
setInterval(lookForCityChange, 100);
然后定义一个lookForCityChange()函数:
function lookForCityChange()
{
var newCity = document.getElementById("city").value;
if (newCity != city) {
city = newCity;
doSomething(city); // do whatever you need to do
}
}
在此示例中,每100毫秒检查一次“城市”的值,您可以根据需要进行调整。如果您愿意,可以使用匿名函数而不是定义lookForCityChange()。请注意,您的代码甚至浏览器可能会为输入字段提供初始值,以便在用户执行任何操作之前通知您“更改”;根据需要调整代码。
如果定时事件每隔十分之一响一次的想法似乎很笨拙,你可以在输入字段收到焦点时启动定时器并在模糊时终止它(使用clearInterval())。我不认为在没有接收焦点的情况下改变输入字段的值是可能的,因此以这种方式打开和关闭定时器应该是安全的。
答案 3 :(得分:17)
HTML5 定义oninput
事件以捕获所有直接更改。它对我有用。
答案 4 :(得分:11)
使用以下事件代替“onchange”
- onkeyup(event)
- onkeydown(event)
- onkeypress(event)
答案 5 :(得分:10)
onchange
仅在用户提交对input元素的更改时发生,大部分时间是元素失去焦点时。
如果你希望你的函数每次元素值改变时触发你应该使用oninput
事件 - 这比键上/下事件更好,因为可以用用户的鼠标改变值,即粘贴,或自动填充等
答案 6 :(得分:5)
首先,什么'不起作用'?你没看到警报吗?
此外,您的代码可以简化为此
<input type="text" id="num1" name="num1" onkeydown="checkInput(this);" /> <br />
function checkInput(obj) {
alert(obj.value);
}
答案 7 :(得分:2)
我遇到了Safari没有在文本输入字段上触发“onchange”事件的问题。我使用了jQuery 1.7.2“更改”事件,它也没有用。我最终使用了ZURB的textchange事件。它适用于鼠标事件,无需离开现场即可开火:
http://www.zurb.com/playground/jquery-text-change-custom-event
$('.inputClassToBind').bind('textchange', function (event, previousText) {
alert($(this).attr('id'));
});
答案 8 :(得分:1)
最好将onchange(event)
与<select>
一起使用。
通过<input>
,您可以使用以下事件:
- onkeyup(event)
- onkeydown(event)
- onkeypress(event)
答案 9 :(得分:0)
onkeyup为我工作。按下退格键时,onkeypress不会触发。
答案 10 :(得分:0)
一些有关IMO重要的评论:
输入元素在用户操作ENTER或模糊等待是正确的行为之前不会发出'change'事件。
您要使用的事件是"input"
(“ 输入时”)。这充分证明了两者之间的区别:https://javascript.info/events-change-input
这两个事件表示两个不同的用户手势/时刻(“输入”事件表示用户正在写或导航选择列表选项,但仍未确认更改。“更改”表示用户确实更改了值(输入或模糊我们的图片)
在这种情况下,监听像此处建议的许多重要事件是一种不好的做法。 (例如人们修改输入中ENTER的默认行为)...
jQuery与这无关。这都是HTML标准。
如果您无法理解为什么这是正确的行为,也许会有所帮助,作为实验,请使用文本编辑器或浏览器,而无需鼠标/键盘,而只需键盘。
我的两分钱。
答案 11 :(得分:0)
当您在输入字段中输入时使用 onchange
时 – 没有事件。但是当你把焦点移到别的地方时,比如点击一个按钮——就会有一个改变事件
您可以使用oninput
oninput
事件在用户每次修改值后触发。与键盘事件不同,它在任何值更改时触发,即使是那些不涉及键盘操作的值:粘贴使用鼠标或使用语音识别来听写文本。
<input type="text" id="input"> oninput: <span id="result"></span>
<script>
input.oninput = function() {
console.log(input.value);
};
</script>
如果我们想处理对 <input>
的每一次修改,那么这个事件是最好的选择。
答案 12 :(得分:-4)
尝试onpropertychange
。
它只适用于IE。