0
$(document).ready(function() {
  $.ajax({
    type: "get",
    url: "textman.php",
    success: function(data) {
      $('#textbaz').append(data);
      var file = data.split(" ");
      var set = 0;
      console.log(file);
      $('#textbaz').append("<br><input id='textbox' type='text' placeholder='Type it man, your on the clock!'>");
    }
  });
  $("#textbox").keypress(function() {
  console.log($("#textbox").val());
});
  return false;
})

問題は、#textbox の値をコンソール ログに記録しないことです。そこに何を入力しても効果はありません D:

4

5 に答える 5

2

これを試してください-(動的に作成された要素のイベント委譲 with.on()

$('#textbaz').on('keypress',"#textbox",function() {
  console.log($(this).val());
});

http://api.jquery.com/on/

于 2013-05-06T08:23:50.357 に答える
2

AJAX は非同期です。リスナーがDOMに存在する前に、keypressリスナーをバインドしています。#textboxの行$("#textbox").keypress(...では、 の結果は$('#textbox')空のオブジェクトになるため、バインダーが登録されている要素はありません。

委任されたイベントを使用する必要があります (を使用.on):

$('#textbaz').on('keypress', '#textbox', function() { ... });

...#textbaz呼び出し時に利用可能であることのみを必要とするか、AJAX コールバックにイベントを登録します。

success: function(data) {
  ...
  $('#textbaz').append("<br><input id='textbox' type='text' placeholder='Type it man, your on the clock!'>");
  $('#textbox').keypress(function() { ... });
}

...これにより、がテキストボックスに追加された後、したがってが作成され.keypressた後にへの呼び出しが行われることが保証されます。#textbaz#textbox

于 2013-05-06T08:24:30.830 に答える
1

動的に追加された要素には、イベント委任を使用する必要があります。

$('#textbaz').on("keypress", '#textbox', function () {
    console.log($("#textbox").val());
});
于 2013-05-06T08:24:13.890 に答える
1

コードは HTTP リクエストを送信し、イベント ハンドラを のすべてのインスタンスにバインドします#textbox。しばらくして HTTP 応答が到着し、successハンドラーが を作成します#textbox

イベント ハンドラーをバインドするためのロジックをハンドラーに移動しsuccessます。

于 2013-05-06T08:25:07.423 に答える
0

$.ajax は非同期呼び出しであるため$("#textbox").keypress()、success 関数に html を追加する前に実行される可能性が高くなります。$("#textbox").keypress を、成功関数内の append() 呼び出しの直後に移動すると、機能するはずです。

代わりに使用できます

.on('keypress', 'selector', function($element) {/*code*/}); 

動的に追加された要素用。

于 2013-05-06T08:25:01.330 に答える