我有一个非常广泛的模板,并且有一个表单用JavaScript或jQuery更新文本字段的值,这个函数一直无法找到它,我需要检测这个字段何时更新,我已尝试使用所有这些功能,但它没有检测到更新时间。
为什么从 JavaScript 更新字段时未检测到,但在字段外书写并单击时更新时检测到?
重要:动态添加的值“90,000”使其成为一个特定的函数,我一直无法找到该函数,并且是尝试检测该值是否随JavaScript改变。
$(function(){
// Automatic update, strange function
setTimeout(function(){
// Value updated automatically
$('#long').val("90.000");
}, 2000);
/**
* Detect if that field is updated
*/
$('input#long').on('change', function(){
alert("Updated");
});
$(':input').on('change', function(){
alert("Updated");
});
$('input#long').change(function(){
alert("Updated");
});
$(document).on('change', 'input#long', function(){
alert("Updated");
});
$(document).on('change', 'input', function(){
alert("Updated");
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="long">
最佳答案
因此,根据您对其他答案的编辑/评论,您无法手动触发更改
。
MutationObserver
是解决这个问题的好方法,只不过它们无法观察输入值的变化,as explained here .
据我所知,您唯一的出路是使用 setInterval
每隔几毫秒将当前值与旧值进行比较。有点丑陋,根本不是最佳选择,但可以完成工作。这是一个示例:
$(function() {
setTimeout(function() {
$('#long').val('90.000');
}, 1000);
$('#long').on('change', function() {
alert('changed');
});
// Store the current value
$('#long').data('oldVal', $('#long').val());
// Every 100ms, trigger `change` event whenever new value != old
setInterval(function() {
if ($('#long').val() !== $('#long').data('oldVal')) {
$('#long').trigger('change');
$('#long').data('oldVal', $('#long').val());
}
}, 100);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="long">
关于javascript - 检测字段是否使用 JavaScript 或 jQuery 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52120455/