当前位置:  开发笔记 > 前端 > 正文

如何使用jQuery实现<input type ="text">的onchange?

如何解决《如何使用jQuery实现<inputtype="text">的onchange?》经验,为你挑选了6个好方法。



1> iPadDevelope..:

正如@pimvdb在评论中所说,

请注意,只有在输入元素失去焦点时才会触发更改.每当文本框更新时都会触发输入事件,而不需要失去焦点.与键事件不同,它也适用于粘贴/拖动文本.

(见文件.)

这非常有用,值得回答.目前(v1.8*?)在jquery中没有.input()方便fn,所以这样做的方法是

$('input.myTextInput').on('input',function(e){
 alert('Changed!')
});


因为你可以绑定到多个事件`$('form').on('change input',function);`为我做了诀窍.谢谢.
@Norris.当一个元素被改变时(第一个),它可能会发射两次,并且失去焦点(第二个).对于许多目的而言,这不是问题,但值得注意.
特别是,IE <9根本不支持.

2> Greg..:

您可以使用 .change()

$('input[name=myInput]').change(function() { ... });

但是,此事件仅在选择器失去焦点时才会触发,因此您需要单击其他位置才能执行此操作.

如果这不适合你,你可以使用其他一些jQuery事件,如keyup,keydown或keypress - 取决于你想要的确切效果.


请注意,`change`只会在输入元素失去焦点时触发.还有一个`input`事件,只要文本框更新而不需要失去焦点,它就会触发.与键事件不同,它也适用于粘贴/拖动文本.
伟大的评论@pimvdb.我用过这个,把它变成了这个问题的答案.

3> Andrew..:

我建议使用如下的keyup事件:

$('elementName').keyup(function() {
 alert("Key up detected");
});

有几种方法可以达到相同的结果,所以我想这取决于偏好,取决于你希望它如何正常工作.

更新:这仅适用于手动输入而不是复制和粘贴.

对于复制和粘贴,我建议如下:

$('elementName').on('input',function(e){
 // Code here
});


可以在不触发keyup的情况下更改input元素的内容.例如,您可以使用鼠标粘贴文本.

4> Mike Gledhil..:

这是我使用的代码:

$("#tbSearch").on('change keyup paste', function () {
    ApplyFilter();
});

function ApplyFilter() {
    var searchString = $("#tbSearch").val();
    //  ... etc...
}


这很好用,特别是当与jqGrid控件配对时.您只需键入文本框即可立即查看结果jqGrid.



5> David Hellsi..:

一个且只有一个可靠的方式做到这一点,它是通过在间隔拉的价值,并将其与一个缓存值.

这是唯一的方法是因为有多种方法可以使用各种输入(键盘,鼠标,粘贴,浏览器历史记录,语音输入等)更改输入字段,并且您永远无法使用十字中的标准事件检测所有输入字段 - 浏览者环境.

幸运的是,由于jQuery中的事件基础结构,添加自己的inputchange事件非常容易.我这样做了:

$.event.special.inputchange = {
    setup: function() {
        var self = this, val;
        $.data(this, 'timer', window.setInterval(function() {
            val = self.value;
            if ( $.data( self, 'cache') != val ) {
                $.data( self, 'cache', val );
                $( self ).trigger( 'inputchange' );
            }
        }, 20));
    },
    teardown: function() {
        window.clearInterval( $.data(this, 'timer') );
    },
    add: function() {
        $.data(this, 'cache', this.value);
    }
};

使用它像: $('input').on('inputchange', function() { console.log(this.value) });

这里有一个演示:http://jsfiddle.net/LGAWY/

如果您害怕多个间隔,可以在focus/ 上绑定/取消绑定此事件blur.


编写和启动这样的代码是一种极端性能影响的疯狂.

6> Developer..:


$(".firstName").on('change keyup paste', function () {
   var element = $(this);
   console.log(element);
   var dataAttribute = $(element).attr("data-someattr");
   console.log("someattr: " + dataAttribute );
});

我建议使用this关键字来访问整个元素,这样您就可以使用此元素完成所需的一切.

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有