3 回答
![?](http://img1.sycdn.imooc.com/5333a0aa000121d702000200-100-100.jpg)
TA贡献1796条经验 获得超4个赞
您可以通过覆盖输入value属性的 setter 函数来实现这一点。因此,每次有人以value编程方式设置时,您的覆盖设置器都会被触发:
const input = document.getElementById('input');
const descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(input), 'value');
Object.defineProperty(input, 'value', {
set: function(t) {
console.log('Input value was changed programmatically');
return descriptor.set.apply(this, arguments);
},
get: function() {
return descriptor.get.apply(this);
}
});
function changeInput() {
input.value += '1';
}
<input id="input">
<button onclick="changeInput()">Change</button>
![?](http://img1.sycdn.imooc.com/533e4c9c0001975102200220-100-100.jpg)
TA贡献1826条经验 获得超6个赞
要以编程方式触发事件,您可以使用事件 API:https : //developer.mozilla.org/fr/docs/Web/API/EventTarget/dispatchEvent
完整示例:
let input = document.getElementById('a')
// Listen the event
input.addEventListener('change', function (evt) {
console.log('onchange event listener')
});
input.onchange = () => {
console.log('onchange callback')
}
setTimeout(() => {
input.value = "myvalue"
// Trigger the event
var event = new Event('change');
input.dispatchEvent(event);
}, 1000)
<input id="a">
![?](http://img1.sycdn.imooc.com/5333a1920001d36402200220-100-100.jpg)
TA贡献1946条经验 获得超4个赞
对于以编程方式更改输入标签中的值,您可以使用triggers.
$(document).on('mytrigger keyup', '#input_num', function() {
var value = $('#input_num').val();
//alert(value);
$('#result').val(value)
})
function external_modifier(){
setTimeout(function(){
var intValue = parseInt($('#input_num').val(), 10);
$('#input_num').val(intValue+1).trigger("mytrigger");
//alert(intValue);
external_modifier();
}, 3000);
}
external_modifier();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<lable> Input: </lable><input id='input_num' type=text value=1 />
<br><br>
<lable> Result: </lable><input id='result' type=text disabled />
添加回答
举报