5

我有输入字段列表。其中一些是只读字段。我正在使用 .keyup() 事件在输入字段发生变化时触发。但它不会影响只读字段。我也想以某种方式更改这些字段。有什么帮助吗?

4

2 回答 2

9

如果您调用focus只读输入字段,则会keyup触发事件。但是,在该字段中键入不会更改其值(毕竟,它是只读的)。也许您需要的是监听其属性的变化?value

我建议听一下inputpropertyChange正如这个答案所建议的那样:

$('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 回答