39

我使用 change(handler) 来监听 textarea 的更改事件,但我只在 textarea 失去焦点时收到一个事件,但我想在值更改后立即收到一个事件。

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

7 回答 7

42

根据此处的正确答案,输入元素上的 Javascript 更改事件只会在失去焦点时触发

你应该做这样的事情

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

但是我发现同时拥有 textInput 和 input 事件会导致事件触发两次,你不希望这样,所以就这样做

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

于 2016-01-14T11:29:32.167 回答
27

不幸的是,浏览器仅在字段模糊时才识别更改,因此您可能想尝试附加一个 keyup 侦听器。不幸的是,这不是最优雅的解决方案。

http://api.jquery.com/keyup/上的详细信息。

于 2012-04-22T17:55:43.900 回答
6

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

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

}
});
});

就我而言,我在 Enter 键上触发了该功能(如 facebooks 功能)。

编辑:另外,如果您在页面上有多个文本区域,您应该这样做:

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

}
});
});
于 2012-04-22T17:59:10.260 回答
1

这就是我所做的:

/* 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'));
  }
});

因此,“keydown”事件在按键实际对其调用的元素进行任何修改之前被触发,“keyup”是在触发之后。所以我获取之前的值并比较之后的新值,然后如果有变化我会做任何我必须做的事情..

我希望这有帮助

于 2015-11-03T12:27:31.140 回答
1

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

$myselector.on('change', function() { /*do something*/ });
$myselector.on('keyup', function() { $(this).blur(); $(this).focus(); });
于 2018-09-02T20:17:23.713 回答
1

你可以setInterval()在你的输入焦点事件中清除这个区间模糊和你相关的功能我认为这是自己捕捉输入变化的好方法。

例子:

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");
}

希望能帮助到你。

于 2017-08-27T21:59:35.863 回答
0

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

JS:

<script>
$(document).ready(function (d) {

    /* set initial value to "" (empty string), and not null
       we're going to use this to check if the value of the current text field has been changed */
    val = '';

    setInterval(function () {
        if (val !== $('textarea[name="checktext"]').val()) {

            // Value is not the same, fire action
            alert('val is different');

            // Update the current value
            val = $('textarea[name="checktext"]').val();
        } else {
            // Val is the same as textarea value
        }

    }, 50);

});
</script>

HTML:

<textarea name="checktext"></textarea>

此脚本仅适用于该特定文本区域,您可以更改它,也可以将val设置为文本输入数组。

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

希望这个对你有帮助。

然而 HTML5 有解决方案

<script>
$(document).ready(function (d) {

    $('textarea[name="checktext"]').on('input', function () {
        alert('changed');
    });
});
</script>
于 2017-04-12T14:17:26.330 回答