2012-04-14 4 views
0

テキストボックスに何かを押した後、常に変化すると思われるテキストのスパンがあります。"onkeypress"ラグを変更してjQueryを変更する

<input type="text" class="response" onkeypress="return ChangeSpan()" id="how_many" name="how_many" placeholder="Enter how many..." /> 

と私のjQuery:

<script type="text/javascript"> 
function ChangeSpan() { 
    var text = $("#how_many").val(); 
    $('#changeText').text(text); 
} 
</script> 

それは完全に罰金働いているが、私はその唯一の存在"df"スパン上、の"dfg"を言わせて押したとき。次のチャレクタを追加するときにのみ、"g"が追加されます。

最後の文字にも反応したいと思いますが、どうすればいいですか?

答えて

6

おそらくkeyupを使用します。

jQueryを使用してイベントをインラインで追加しますか?それは悪い習慣です。 onを使用してイベントを添付します。 keyUpイベント、KeyDownイベント、およびキー押下の間

$("#how_many").on("keyup", function(){ $('#changeText').text(this.value); }); 

違いquirksmodeに説明しました。

+0

+1これはなぜこの問題を修正し、イベント属性を妨げるのか説明するためです。 –

+0

ありがとう!それは完全に働いた! – thormayer

+0

jQueryのようなフレームワークを使用していなくても、インラインイベントを使用するのは悪い習慣です。 –

0
<input type="text" class="response" onkeyup="return ChangeSpan()" id="how_many" name="how_many" placeholder="Enter how many..." /> 
+0

なぜ*これで修正されるのか –

+1

実際には、文字が生成された後に起動する 'keyup'イベントでなければならず、キー押下はキーダウンと似ていますが、キーが解放された後に生成されます。 –

0

なぜバインディングを使用しないのですか?これを行う必要があります:

<input type="text" class="response" id="how_many" name="how_many" placeholder="Enter how many..." /> 



$(window).load(function(){ 
    $("#how_many").bind('focus blur keyup',function(){ 
    $('#changeText').text($(this).val()); 
    }); 
}) 
+1

注:現在のバージョンのjQueryでは、「バインド」を「使用」することを推奨していません。 – webnesto

0

イベントをキーアップに変更してみてください。ここでは例です:

http://jsfiddle.net/SHdTL/

注:私はむしろ、インラインよりも、同様にあなたのイベントリスナーを割り当てるためにjqueryのを使用してお勧めしますが、それはあなたの問題には関係ありません。

1

うん、私はあるかもしれない少し遅れたが、実際にあなたが非常に長いキーを保持している場合、あなたがkeyupを使用する場合は、それを解放するとき、それが表示されますので、keyupよりも優れているkeypressを使用。

keypressを使用すると、入力した内容が直接表示されますが、下のコードのように使用する必要があります。

唯一の問題は、keypressが文字を削除するかどうかを認識しないことです。したがって、keypressがより良いですが、keyupも使用する必要があります。

$("#how_many") 
    .keypress(function(e) { 
     var text = $("#how_many").val() + String.fromCharCode(e.which); 
     $("#changeText").text(text); 
    }) 
    .keyup(function(e) { 
     var text = $("#how_many").val(); 
     $("#changeText").text(text); 
    });​ 

thisの例を見てください。前のコードとまったく同じです。

およびthis例。 keypressを使用しない前のコードです。

テキストボックスにフォーカスがある間、両方の例で任意の文字キーを保持します。ご覧のとおり、最初の例はよりよく反応します。

関連する問題