我看了很多其他的问题,并找到了非常简单的答案,包括下面的代码。 我只是想检测当有人更改文本框的内容时,但出于某种原因它不起作用... 我没有控制台错误。 当我在浏览器中在change()
函数处设置断点时,它从未命中过。
$('#inputDatabaseName').change(function () {
alert('test');
});
<input id="inputDatabaseName">
我看了很多其他的问题,并找到了非常简单的答案,包括下面的代码。 我只是想检测当有人更改文本框的内容时,但出于某种原因它不起作用... 我没有控制台错误。 当我在浏览器中在change()
函数处设置断点时,它从未命中过。
$('#inputDatabaseName').change(function () {
alert('test');
});
<input id="inputDatabaseName">
您可以像这样在jQuery中使用input
JavaScript事件:
$('#inputDatabaseName').on('input',function(e){
alert('Changed!')
});
使用纯JavaScript:
document.querySelector("input").addEventListener("change",function () {
alert("Input Changed");
})
或者像这样:
<input id="inputDatabaseName" onchange="youFunction();"
onkeyup="this.onchange();" onpaste="this.onchange();" oninput="this.onchange();"/>
尝试使用keyup而不是change。
<script type="text/javascript">
$(document).ready(function () {
$('#inputDatabaseName').keyup(function () { alert('test'); });
});
</script>
每个答案都有一些不足之处,下面是我的解决方案:
$("#input").on("input", function(e) {
var input = $(this);
var val = input.val();
if (input.data("lastval") != val) {
input.data("lastval", val);
//your change action goes here
console.log(val);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="input">
<p>Try to drag the letters and copy paste</p>
Input Event
在键盘输入、鼠标拖动、自动填充和Chrome、Firefox上的复制粘贴操作时触发。检查前一个值可以检测到真正的更改,这意味着当粘贴相同内容或键入相同字符等情况时不会触发。
工作示例:http://jsfiddle.net/g6pcp/473/
更新:
如果您希望在用户完成打字后才运行change function
并防止多次触发更改操作,您可以尝试这个方法:
var timerid;
$("#input").on("input", function(e) {
var value = $(this).val();
if ($(this).data("lastval") != value) {
$(this).data("lastval", value);
clearTimeout(timerid);
timerid = setTimeout(function() {
//your change action goes here
console.log(value);
}, 500);
};
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="input">
如果用户开始输入(例如"foobar"),此代码可以防止每个键入的字母都运行您的更改操作
,并且仅在用户停止键入时运行,这对于当您将输入发送到服务器(例如搜索输入)非常有用,因此服务器仅针对foobar
进行一次搜索,而不是六次搜索f
,然后是fo
,然后是foo
,再到foob
等等。
$("#input").on("input focusout",function(e){
。 - azerafati文本输入框在失去焦点前不会触发change
事件。点击输入框以外的区域,警报将显示。
如果需要在文本输入框失去焦点之前触发回调,请使用.keyup()
事件。
change
正在这里工作: http://jsfiddle.net/g6pcp/ ; keyup
显示每个按键后的警报,这不是一个好方法。 - xkeshavalert()
。这将使调试变得轻松得多。 - Matt Ballonkeyup, onpaste, onchange, oninput
当浏览器在文本框中进行自动填充时似乎会出现问题。为了处理这种情况,请在文本字段中包含"autocomplete='off'
",以防止浏览器自动填充文本框。
例如:
<input id="inputDatabaseName" autocomplete='off' onchange="check();"
onkeyup="this.onchange();" onpaste="this.onchange();" oninput="this.onchange();" />
<script>
function check(){
alert("Input box changed");
// Things to do when the textbox changes
}
</script>
<input type="text" id="bookdate">
$("#bookdate").datepicker({
onSelect: function (selected) {
//handle change event here
}
});
试试这样做,它总是有效的。
$(function() {
$("#my_input").on("change paste keyup", function() {
alert($(this).val());
});
});
我认为你也可以使用 keydown
:
$('#fieldID').on('keydown', function (e) {
//console.log(e.which);
if (e.which === 8) {
//do something when pressing delete
return true;
} else {
//do something else
return false;
}
});