JQuery改变直到模糊才开始

我使用change(handler)来监听更改事件到textarea,但是我只在textarea失去焦点时收到一个事件,但是我希望一旦值发生变化就收到一个事件。

$("#text_object").change(listener); function listener(dom){ alert("I'm not getting here before the textarea loses focus"); } 

不幸的是,当字段模糊时,浏览器只识别更改,因此您可能希望尝试附加keyup侦听器。 不幸的是,这不是最优雅的解决方案。

有关详细信息,请访问http://api.jquery.com/keyup/ 。

根据正确的答案,输入元素上的javascript更改事件仅在失去焦点时触发

你应该做这样的事情

 $('#name').on('change textInput input', function () { }); 

你可以这样做。 只要确保你给textarea一个id标签

 $(document).ready(function(){ $('.addtitle').keyup(function(event) { if(event.keyCode==13) { } }); }); 

在我的情况下,我在输入键上启动function(如facebooksfunction)。

编辑:如果你在页面上有多个textarea,你应该这样做:

 $(document).ready(function(){ $('textarea[name=mynamevalue]').keyup(function(event) { if(event.keyCode==13) { } }); }); 

这是我做的:

 /* Get the current value of the input and save it * in a data attribute before any change is made to it */ $(document).on('keydown','input', function(){ $(this).data('value',$(this).val()); }); /* Compare the values after the keyup event*/ $(document).on('keyup','input', function(){ if($(this).data('value') != $(this).val()){ console.log($(this).attr('name')); } }); 

因此,在keypress实际对其调用的元素进行任何修改之前,“keydown”事件被触发,“keyup”在触发之后。 所以我之前抓住了这个值并比较了之后的新值,然后如果有变化我会做任何事情。

我希望这有帮助

我为你创造了这个,它不是最优雅的解决方案,但它有效

JS:

  

HTML:

  

此脚本仅适用于特定的textarea,您可以更改它,或者您可以将val设置为文本输入数组。

我只是向你展示它背后的想法,使用x毫秒的setInterval来检查文本输入的值是否与val的值或你想要使用的任何变量名相同。 如果它们不匹配则表示它已被更改,如果它们匹配则表示没有任何改变。

希望这个对你有帮助。

但HTML5有解决方案

  

这个问题很老但它可以帮助像我这样的人;)
您可以在输入焦点事件中设置setInterval()并在模糊中清除此间隔以及相关function我认为这是自己捕获输入更改的好方法。
例:

 var myInterval; $("#text_object").focus(function (event) { myInterval = setInterval(function () { listener(event); }, 100); }); $("#text_object").blur(function (event) { clearInterval(myInterval); }); function listener(event){ clearInterval(myInterval); alert("I'm not getting here before the textarea loses focus"); } 

希望能帮助到你。

您可以在每次按键后强制模糊,以便立即有效地进行更改检查。

 $myselector.on('change', function() { /*do something*/ }); $myselector.on('keyup', function() { $(this).blur(); $(this).focus(); });