2

私はこのトピックに関するSOに関するさまざまな投稿を見てきました。テキストボックスの文字ダウンカウンター(例:「98CharactersLeft」)を作成しています。これを発生させることができる唯一のイベントはですがkeydown()、テキストがテキストボックスに貼り付けられると処理されません。関数を作成して、updateCharCount()すべてのイベントに設定してみました(一度にすべて、個別に:キーアップ、キーダウン、キープレス、変更)。

bind()また、とを使用してハンドラーを設定してみましたlive()。キーダウンとキーアップのハンドラーを同時に設定しようとすると、どちらも起動しません。何を読んでも、それが解決策ですが、変更はまったく起動しません。これはどうやってできるの?

また、keydown()イベントのみを処理すると、奇妙な動作が発生します。(ところで、テキストボックスのmaxLength属性を100に設定しています)最大文字数に1回または2回バックスペースを入力してから、もう一度最大数に入力すると、「残り1文字」と表示されます。が最大になり、そこから1回バックスペースすると、「0 Characters(s)Left」と表示されます。これが私のコードです:

function updateCharCount(){
    var clientmsg = $("#usermsg").val();
    var count = $("#usermsg").attr("maxLength") - clientmsg.length;
    $("#charsleft").html(count);
}
$("#usermsg").keydown(updateCharCount());

誰かが奇妙な振る舞いを説明できればいいのですが、私が本当に知りたいのは、.change()が非常に広く使用されている場合、それが私にとっても、.bind('change'、.. .. )または.live('change'、...)

4

2 に答える 2

4

次のように、 .on()を使用して複数のイベントをバインドできます(バインドとライブは非推奨になりました)。

$("#usermsg").on({
    change: updateCharCount,
    keyup: updateCharCount,
    keydown: updateCharCount
})​

jsFiddleの例

于 2012-09-06T15:19:40.220 に答える
1

記号が挿入される前に、キーダウンが発生するkeyup代わりに使用します。keydown

テキストフィールドによる変更は、フォーカスがそのフィールドを離れたときにのみ発生します。何かが変わったが、シンボルを追加したときはいつでも

Keyupは貼り付けイベントも処理します。

于 2012-09-06T15:16:29.887 に答える