2011-05-26 105 views
21

文本输入元素没有更改事件吗?当我将更改事件处理程序附加到文本输入时,它不会被解雇。 Keyup被触发,但是keyup不足以检测到更改,因为显然有其他方法可以将文本输入到输入中。jQuery文本框更改事件

+2

也许这将有助于:http://stackoverflow.com/questions/1481152/jquery-how-to-detect-a-textboxs-content-has-changed – Bashwork 2011-05-26 14:13:38

+0

你使用$('input')。change( function(){do something}); ? – tenshimsm 2011-05-26 14:20:42

+0

是的,我使用.change和.keyup,但它们不够,请在下面看到我的答案... – jcvandan 2011-05-26 14:29:10

回答

4

没有真正的解决方案 - 即使在上面给出的其他问题的链接。最后我决定使用setTimeout并调用每秒检查一次的方法!不是一个理想的解决方案,但是我所调用的解决方案和代码很简单,不会随时被调用而影响性能。

function InitPageControls() { 
     CheckIfChanged(); 
    } 

    function CheckIfChanged() { 
     // do logic 

     setTimeout(function() { 
      CheckIfChanged(); 
     }, 1000); 
    } 

希望这可以帮助别人的未来,因为它似乎有acheiving此使用的事件处理程序没有万无一失的方法...

14

更改事件仅在输入失去焦点(并被更改)后才会触发。

+3

如果您真的想知道任何文本何时更改,就像它发生更改一样,您会停止轮询输入。也就是说,将setInterval与一个函数进行比较,该函数将输入的当前值与先前存储的值进行比较(通过比函数范围更高的某个变量)。如果这两个值不匹配,则发生更改。然后,将当前值存储到另一个变量中以进行下一次检查。 – ventaur 2011-05-26 14:21:45

28

的HTML4规范为<input> element指定以下脚本事件可用:

的onfocus,的onblur,ONSELECT,平变化, 的onclick,onfocus此,onmousedown事件, onmouseup,的onmouseover,的OnMouseMove, 的onmouseout,onkeypress事件,的onkeydown, 的onkeyup

这里是结合对所有这些事件的一例,表示这是怎么回事http://jsfiddle.net/pxfunc/zJ7Lf/

我想你可以过滤掉哪些事件是真正培训相关您的情况,并检测一下文本值之前和在事件发生后,确定变更

+1

我想过使用变化,焦点,模糊,键盘和mouseup在一起 - 然而mouseup只会在鼠标移动到texbox上时触发,这意味着它不会从上下文菜单中粘贴用户,粘贴可能是粘贴在文本输入范围之外 – jcvandan 2011-05-26 14:33:55

+1

看起来像新的浏览器支持'paste'和'input'事件,我在这里找到它们之后添加了这些事件,[jquery - 如何检测鼠标右键点击并使用JavaScript粘贴](http:// stackoverflow.com/questions/441631/how-to-detect-right-mouse-click-paste-using-javascript)...heres [更新的小提琴](http://jsfiddle.net/pxfunc/zJ7Lf/1/ ) – MikeM 2011-05-26 14:38:26

+0

潜在有用,但如果他们没有非常广泛的支持,真的不能使用它们! – jcvandan 2011-05-26 14:40:59

21

我发现这工作:

$(document).ready(function(){ 
    $('textarea').bind('input propertychange', function() { 
     //do your update here 
    } 

}) 
+0

我广泛使用它来验证与ajax内联。我认为正在讨论的新突变事件将取代某些功能,但该解决方案已经在Firefox,Chrome,IE 10和Safari中测试过,并且已知可以正常工作。 – 2013-07-02 17:45:15

1

可以实现它:

$(document).ready(function(){    
    $('#textBox').keyup(function() {alert('changed');}); 
}); 

或改变(柄复制与粘贴右键点击):

$(document).ready(function(){    
    $('#textBox2').change(function() {alert('changed');}); 
}); 

这里是Demo

+2

如果有人右键点击并粘贴到文本框中,该怎么办? – jcvandan 2012-12-06 11:19:09

+0

检查演示,其处理复制粘贴太 – 2014-01-17 12:08:30

+0

是的,它不处理右键单击粘贴,然后退出 – PandaWood 2014-10-22 22:58:24

0
$('#input').on("input",function() {alert('changed');}); 

为我工作。