首页 文章

JQuery:检测输入字段的变化[重复]

提问于
浏览
178

可能重复:Jquery:如何检测文本框的内容已更改

我想检测用户的键盘操作何时改变文本字段的值 . 它应该在现代浏览器中一致地工作 .

.keypress事件的JQuery页面说它不一致?此外,它不适用于退格,删除等 .

我不能使用.keydown,因为它会对shift,alt和箭头键等作出反应 . 此外,当用户按住某个键并插入多个字符时,它不会多次触发 .

有没有简洁的方法我错过了?或者我应该使用.keydown并过滤掉由箭头键,移位等触发的事件?我主要担心的是,我不知道应该过滤掉的密钥 . (我差点忘了alt和ctrl,我想可能还有其他人)但是那时我怎样才能检测到按下的键并插入多个字符?

作为奖励,它会检测由于粘贴(包括右键单击)引起的更改,但我从here获得了解决方案 .

5 回答

  • 589

    您可以将'input'事件绑定到文本框 . 这将触发 every time 输入更改,因此当您粘贴某些内容(即使右键单击)时,删除并键入任何内容 .

    $('#myTextbox').on('input', function() {
        // do something
    });
    

    如果使用 change 处理程序,则只有在用户取消选择输入框后才会触发,这可能不是您想要的 .

    这里有一个例子:http://jsfiddle.net/6bSX6/

  • 3

    我最近使用以下功能实现了相同的功能 .

    我想在编辑时启用SAVE按钮 .

    • 更改事件是不可取的,因为只有在编辑后才会触发,在单击“保存”按钮之前单击页面上的其他位置鼠标 .

    • 按键不处理退格键,删除键和粘贴选项 .

    • Key Up处理包括Tab键,Shift键在内的所有内容 .

    因此,我在下面写了一个功能,结合了按键,键盘(用于退格键,删除)和文本字段的粘贴事件 .

    希望它能帮到你 .

    function checkAnyFormFieldEdited() {
        /*
         * If any field is edited,then only it will enable Save button
         */
        $(':text').keypress(function(e) { // text written
            enableSaveBtn();
        });
    
        $(':text').keyup(function(e) {
            if (e.keyCode == 8 || e.keyCode == 46) { //backspace and delete key
                enableSaveBtn();
            } else { // rest ignore
                e.preventDefault();
            }
        });
        $(':text').bind('paste', function(e) { // text pasted
            enableSaveBtn();
        });
    
        $('select').change(function(e) { // select element changed
            enableSaveBtn();
        });
    
        $(':radio').change(function(e) { // radio changed
            enableSaveBtn();
        });
    
        $(':password').keypress(function(e) { // password written
            enableSaveBtn();
        });
        $(':password').bind('paste', function(e) { // password pasted
            enableSaveBtn();
        });
    
    
    }
    
  • 9

    使用jquery change event

    描述:将事件处理程序绑定到“更改”JavaScript事件,或在元素上触发该事件 .

    一个例子

    $("input[type='text']").change( function() {
      // your code
    });
    

    .change 优于 .keypress.focus.blur 的优点是 .change 事件仅在输入发生变化时才会触发

  • 6

    使用 $.on() 将您选择的事件绑定到输入,不要使用 $.keydown() 等快捷方式,因为从jQuery 1.7开始 $.on() 是附加事件处理程序的首选方法(请参阅此处:http://api.jquery.com/on/http://api.jquery.com/bind/) .

    $.keydown() 只是 $.bind('keydown') 的快捷方式, $.bind()$.on() 取代的(等等) .

    要回答你的问题,据我所知,除非你需要专门在 keydown 上发射一个事件,否则 change 事件应该为你做好准备 .

    $('element').on('change', function(){
        console.log('change');
    });
    

    要回复以下评论,请在此处记录javascript change 事件:https://developer.mozilla.org/en-US/docs/Web/Events/change

    以下是使用jQuery处理输入元素的 change 事件的工作示例:http://jsfiddle.net/p1m4xh08/

  • 8

    您可以使用jQuery change()函数

    $('input').change(function(){
      //your codes
    });
    

    有关如何在API页面上使用它的示例:http://api.jquery.com/change/

相关问题