JQuery改变直到模糊才开始

时间:2012-04-22 17:47:23

标签: jquery

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

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

7 个答案:

答案 0 :(得分:25)

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

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

答案 1 :(得分:13)

根据这里的正确答案javascript change event on input element fires on only losing focus

你应该做这样的事情



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




然而我发现同时拥有textInput和输入事件会导致事件触发两次,你不想要那样,所以就这样做

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

答案 2 :(得分:6)

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

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

}
});
});

在我的情况下,我在输入键上启动了这个功能(比如facebooks功能)。

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

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

}
});
});

答案 3 :(得分: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'));
  }
});

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

我希望这会有所帮助

答案 4 :(得分: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");
}

希望它有所帮助。

答案 5 :(得分: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>

答案 6 :(得分:0)

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

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