概览
我正在编写一个jquery插件,它将文本框转换为时间输入框。这意味着它允许用户以HH:MM格式输入时间。此过程的一部分是在正确的位置插入冒号(:)。在keyup上,我检查用户是否键入了2个数字,如果是,则在输入的值中添加冒号。
问题:
此方法工作正常,除非有人在文本框上应用插件但又想要自定义onchange处理程序。当代码以编程方式更新文本框值时,此onchange处理程序不会触发,也不会在文本框失去焦点时触发。
我的理解:
我猜这里,所以如果我错了请纠正我。
"_value"
(强调为
区分保存的公共值属性)字段
编辑开始前文本框中的值。当焦点离开时
在texbox中,JS引擎检查文本框的当前值
匹配文本框的"_value"
。如果它们不同,则
onchange
事件被解雇。"_value"
只是值,因此onchange
被触发。但也许吧
通过JS修改的值修改两者值和"_value"
和
所以onchange事件不会触发?的解决方法:
模糊事件会触发,因为它与值无关。所以我可以从blur事件中明确地触发change事件。但是我不想这样做,因为它是一个hack并且打破了模糊和改变的语义。
相关链接:
我在SO上发现了几个相同问题的链接,但没有答案(恕我直言)提供了一个优雅或正确的解决方案。 以下是我看到的一些内容:
Javascript : onchange event does not fire when value is changed in onkeyup event
https://stackoverflow.com/questions/14410870/using-both-onchange-and-onkeyup-in-ie8
Javascript: "onchange" event does not work with "value" change in "text input" object
简化代码:
$(document).ready(function () {
$("input").keyup(function () {
this.value = '*' + this.value;
// this changes the value, but does not fire the onchange event
// and it also does not fire it when the textbox loses focus.
// blur fires though.
});
$("input").change(function () {
alert('in change');
});
$("input").blur(function () {
alert('in blur');
});
});
FIDDLE:
http://jsfiddle.net/sajjansarkar/vHgst/4/
浏览器测试: IE8,10和Chrome。 适用于FireFox(!!)(+1 Felix Kling)
答案 0 :(得分:1)
您可以使用jquery.trigger以编程方式触发事件: http://jsfiddle.net/vHgst/5/
$(this).trigger('change');