2

別の要素に属性を設定する際に問題があります。

私はJSとHTMLでPHPコードを使用していますが、次のようになります。

<textarea name='$id' id='$id' class='regular-text' cols='60' rows='1' tabindex='2'"
            . "onkeypress =\"javascript:document.getElementById('content').setAttribute('onkeypress', document.getElementById('so_observer_heading_count').innerHTML = document.getElementById('content').value.length)\">$value</textarea>

私には2つの要素があることを知っている必要があります。最初の ('content') はテキストを書くために使用し、もう 1 つ ('so_observer_heading_count') では、最初の要素からの記号の数を更新する必要があります。

私の質問は、別の要素に属性を設定するにはどうすればよいかということです。

名前が正しいことを既に確認しており、要素のテキストエリアの内容を変更すると、最初の要素から適切な量が得られます。しかし、最初の要素のコンテンツを変更して金額を更新したいだけです。

そして、最初の要素のコードを変更したくありません! テキストエリアと混同しないでください。将来的には、これはラベルか何かになるでしょう。

4

3 に答える 3

2

初めに:

inline-eventbindings は使用しないでください。常に「本物の」javascript を使用してください (これにより、引用符をエスケープする問題も回避できます)。これは、はるかにクリーンで維持しやすいものです。

また、コードには別の問題があります。テキストエリアにイベントハンドラー「キープレス」があり、「キープレス」ごとに別の属性をコンテンツ要素にバインドします。これはあまりパフォーマンスが高くなく、ほとんどの場合、適切に動作しません。このコードは、必要なものすべてである必要があります。

document.getElementById('content').addEventListener("keyup",function(){

    var obs  = document.getElementById('so_observer_heading_count');    

    obs.innerHTML = this.value.length;

});​

これがあなたのためのデモです。

編集: イベントを から に変更しkeypressましkeyupた。1) 適切にカウントする 2) 文字の削除を考慮に入れる。

于 2012-07-09T08:42:05.433 に答える
0

「setAttribute」はメソッドでは機能しないと思います。代わりに試してください:

 document.getElementById('content').onkeypress = function() { document.getElementById('so_observer_heading_count').innerHTML = document.getElementById('content').value.length };
于 2012-07-09T08:33:43.063 に答える
0

確かにもっと..これを行う効率的な方法がありますが、一重引用符をエスケープするのを忘れていたため、js は最終結果を解析する代わりに、イベントを文字列として扱います。

<textarea name='$id' id='$id' class='regular-text' cols='60' rows='1' tabindex='2'"
        . "onkeypress =\"document.getElementById('content').setAttribute('onkeypress', 'document.getElementById(\'so_observer_heading_count\').innerHTML = document.getElementById(\'content\').value.length;')\">$value</textarea>

そうでなければ..キーが押されるたびに、ドキュメントの読み込み/準備ができたときに上記の行を実行する、含まれているjsファイルを介して個人的にこれを行います。

更新: わずかな編集により、上記のコードから削除したものはすべて追加されました。そのままコピーしたい場合に備えて.

于 2012-07-09T08:33:58.090 に答える