立即检测<输入类型=“;文本“>通过JavaScript修改
Immediately detect changes in an <input type="text"> modified by JavaScript
当输入type="text"被JavaScript修改时,我想立即检测它的更改。当用户手动更改时,可以通过以下方式触发检测:
onchange="myfunction();" onkeyup="this.onchange();" onpaste="this.onchange();" oninput="this.onchange();"
我就是想不通这个。
正如您所说的,您可以控制更改它的代码,当您更改输入的内容时,您可以简单地触发一个更改事件。在jQuery中是:
var textinput = //Perhaps $("input[type='text']") or $("#someid")
textinput.val("New text here");
textinput.trigger("change");
这将触发您绑定到onchange事件的任何函数。
如果你经常这样做,你可能只想创建一个函数来更新值并触发事件。
如果没有jquery,它会稍微复杂一点,但看看如何手动触发onchange事件?
编辑:
这里有一个完整的例子,再次使用jQuery。请注意,我使用javascript来设置处理程序,而不是在HTML中实际指定它们,因为一般来说,这是更好的做法。
HTML:
<input type="text" id="toChange">
Javascript:
function changeFunction() {
//Do whatever
}
$(document).ready(function() {
var inputbox = $("#toChange");
inputbox.on('change', changeFunction);
inputbox.on('paste', changeFunction);
//Can attach other functions, though beware of multiple triggers
});
//SetTimeout in place of whatever code does the changing
window.setTimeout(function() {
var inputbox = $("#toChange")
inputbox.val("Set by function");
inputbox.trigger("change");
}, 3000);
J隐藏
您可以使用MutationObserver
对象来观察属性的变化。但是,我不确定在执行el.value = ...
而不是el.setAttribute('value', ...)
时是否会调用回调。
您也可以使用Object.defineProperty
为value
属性定义一个自定义的setter。然而,我从未在DOM元素上执行过此操作,如果已经定义了setter,那么您可能需要确保新的setter也会调用它。您可能可以使用Object.getOwnPropertyDescriptor
来获取当前的setter(如果有的话)。
最后,作为最后的手段,您可以始终使用setInterval
定期检查元素的value
属性是否发生了更改,但我并不喜欢这种方法。然而,它可能是唯一一个跨浏览器的。
不幸的是,我现在无法测试这些,但我稍后会回来更新这个答案。
- 是否<asp:文本框>有一个onFocusLost事件
- 转换<a>使用jQuery将文本字符串转换为dom元素
- jquery仅限<并且>文本框中的符号
- jQuery/Javascript>on单击将文本放置在最后一个已知的光标位置
- 使用动态<选择>以显示<输入类型=“;文本>
- 如何制作<文本/>作为React Native中图像的水印
- KendoUI Mobile ListView/MVM”;对象#<文本>没有方法'getAttrib
- MVC.Net 4 Razor问题使用<文本>标签
- 立即检测<输入类型=“;文本“>通过JavaScript修改
- 获取<输入类型=“;文本“>它是在模态中动态创建的
- 如何转换<文本>(文本标签)在jquery中锚定标签
- 如何从span获取文本->李->ul->要素
- svg-<tspan>内部<文本>在FF和Safari中不可见
- 如何在svg<文本>
- 移动<文本>围绕svg元素
- 如何调用JS函数,在<输入类型=“;文本“>来自AUTOCOMPLETE列表
- 如何在<输入类型=“;文本“>领域
- 为什么我不能从<输入类型=“;文本“>块
- svg:Wrap<文本>在<a>使用javascript将显示白色页面(没有错误)
- 返回只读<输入类型=文本>