39

change(handler)を使用してテキストエリアへの変更イベントをリッスンしますが、テキストエリアがフォーカスを失ったときにのみイベントを受信しますが、値が変更されたらすぐにイベントを受信したいと思います。

$("#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イベントの両方があると、イベントが2回発生する可能性があることがわかりました。これは望ましくないので、実行してください。

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

于 2016-01-14T11:29:32.167 に答える
27

残念ながら、ブラウザはフィールドがぼやけたときにのみ変更を認識するため、キーアップリスナーをアタッチしてみてください。残念ながら、最も洗練されたソリューションではありません。

詳細については、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キーで関数を起動します(Facebookの関数など)。

編集:また、ページに複数のテキストエリアがある場合は、次のようにする必要があります。

$(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」イベントは、keypressが呼び出された要素に実際に変更を加える前に発生し、「keyup」は発生後に発生します。したがって、前の値を取得し、後の新しい値を比較してから、変更があった場合は必要なことをすべて実行します。

これがお役に立てば幸いです

于 2015-11-03T12:27:31.140 に答える
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 に答える
1

キーを押すたびにぼかしを強制して、変更チェックがすぐに効果的に行われるようにすることができます。

$myselector.on('change', function() { /*do something*/ });
$myselector.on('keyup', function() { $(this).blur(); $(this).focus(); });
于 2018-09-02T20:17:23.713 に答える
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 に答える