0

関数を要素にアタッチするためのクロスブラウザー互換の Javascript ベースの方法を見つけるのに苦労しています。Microsoft (もちろん) はまたもや独自のやり方を持っており、これを行うのを困難にしているようです。基本的に、Javascript でテーブルを動的に作成し、行のセルに TEXTAREA 要素を追加しています。TEXTAREA の onkeydown に関数を追加して、テキスト ボックスの長さが上限に達したかどうかを確認する必要があります (残念ながら、TEXTAREA 要素は MaxLength プロパティをサポートしていません)。

FF と IE6、IE7、IE8、および IE9 で機能する、これに対する簡単な解決策はありますか?

4

3 に答える 3

1

jQueryをご覧になることをお勧めします。例は次のようになります

$('textarea').keydown(function () { });

この例では、すべてのテキストエリアにイベント ハンドラーを追加していることに注意してください。より良い方法は、css クラスまたは別のより具体的な選択を使用して、適切なテキストエリアを見つけることです。例えば:

$('textarea.limitedlength').keydown(function () { });

また、要素を作成した後にこれを行う必要があることに注意してください。タイミングを気にしたくない場合は、live 関数を使用します。jQuery は、新しく見つかった要素にイベント ハンドラーをアタッチします。

$('textarea.limitedlength').live('keydown', function () { });

利点は、クロスブラウザーの問題がフレームワークによって処理されることです。( keydown イベントに関するクロスブラウザーの問題は認識していませんが、jQuery はイベントハンドラーの設定と適切な要素の選択の違いを処理します)。

RobG が彼の回答で指摘しているように、貼り付けのため、キーダウン (およびキーアップ イベント) は十分ではありません。別のアプローチは、フォーカスがテキストエリアから削除されたときをカウントして確認することです。

$('textarea.limitedlength').blur(function () { });
于 2011-05-12T20:57:55.410 に答える
1

キーイベントを使用してテキストエリアのコンテンツをチェックする際の問題は、貼り付けやドラッグなど、テキストを入力する他の方法があることです。多くの場合、setIntervalまたはsetTimeoutを使用してコンテンツをチェックし、カウントを時々 (たとえば 50 ミリ秒) 更新しますが、そのようなアプローチは計算効率が悪い場合があります。テキストエリアにフォーカスがある場合にのみタイマーを実行できる場合があります。

inputフォーム コントロールに入力があるたびに発生する HTML5 イベント タイプもあります。

<textarea oninput="document.getElementById('msg').innerHTML = this.value.length;">
</textarea>
<div id="msg"></div>

もちろん、すべてのブラウザーがそれをサポートしているわけではありません。

于 2011-05-13T01:06:28.877 に答える
0

複数のイベント リスナーをアタッチする必要がない限り、これで問題なく動作します。

element.onkeydown = function(e)
{
    e = e || window.event;
    ...
}
于 2011-05-12T20:57:56.720 に答える