我有输入字段列表。其中一些是只读字段。我正在使用 .keyup() 事件在输入字段发生变化时触发。但它不会影响只读字段。我也想以某种方式更改这些字段。有什么帮助吗?
问问题
8714 次
2 回答
9
如果您调用focus
只读输入字段,则会keyup
触发事件。但是,在该字段中键入不会更改其值(毕竟,它是只读的)。也许您需要的是监听其属性的变化?value
我建议听一下input
,propertyChange
正如这个答案所建议的那样:
$('input').bind('input propertychange', function() {
// Do something
});
这样,当您的输入值发生变化时(以任何方式),您都会收到通知。编辑:如果您以编程方式更改值,则不起作用 - 对于这种情况,唯一可行的跨浏览器替代方案涉及轮询(例如this)。更好的选择可能是使用诸如knockout.js之类的框架,它可以为您自动执行此操作,同时在视图和模型之间提供清晰的分离。这是一个例子。
更新:我记得在已删除的答案中阅读了您的评论,指出您正在以编程方式设置输入的值,对吗?(有 10k rep 的用户可以恢复它吗?)在这种情况下,为什么不让更改值的代码直接触发侦听器呢?
$(link).click(function() {
$(readonlyInput)
.val("some val") // Update the value
.trigger('keyup'); // Trigger the listener
});
于 2012-08-13T05:40:03.010 回答
1
似乎 readonly 字段不侦听暗示诸如“input”、“keyup”等输入的事件,如果您认为这是一种合乎逻辑的行为,它们仍然会侦听 change 事件,那么为什么不使用“onchange”而不是输入事件,使用 jQuery 相当简单:对于
$("input").filter(function(){
return $(this).prop("readonly");
}).on("change", function(){
// do something
});
对于其他非只读输入
$("input").filter(function(){
return !$(this).prop("readonly");
}).on("keyup", function(){
// do the same thing something
});
于 2014-12-05T22:55:43.477 回答