0

私は次のコードを持っています:

<div id="comments" class="clearfix">
  <div class="conversation box_round_s box_shadow clearfix mtm">
  <div class="conversation box_round_s box_shadow clearfix mtm">
    <input class="conv_tracker" type="hidden" value="4695f1db2d">
    <div class="conv-header">2</div>
    <div class="comment pts plm prs pbs">
    <div class="comment plxl pts plm prs pbs">
    <div class="replybox pvs clearfix">
      <textarea class="comment_txt_r fses fft"></textarea>
    </div>
  </div>
  <div class="conversation box_round_s box_shadow clearfix mtm">
  <div class="conversation box_round_s box_shadow clearfix mtm">
</div>

クラス conv_tracker (value="4695f1db2d" のコードの 4 行目) で入力の値を読み取ろうとしています。この値を読みたい。誰かがテキストエリアでEnterキーを押したときに読んでいます。ページに複数のテキスト領域があります。私は次のjqueryを使用しています:

コードはif内に入りますが、未定義と表示されます。

$(".comment_txt_r").keydown(function(e){
  var code = (e.keyCode ? e.keyCode : e.which);
  if(code == 13) {      
    var ctext = $(this).val();
    var relid = $(this).closest('.conversation').children('input.conv_tracker').val();
    alert(relid);
  }
});

誰が私が間違っているのか教えてもらえますか?

4

4 に答える 4

2

を使用し$('#conv_tracker').val()ます。closestID はページ内で一意である必要があるため、およびを介して DOM を上下に走査し、childrenID で選択する必要はありません。IDで選ぶだけ。

現在のコードが機能していない場合、ID がページ内で一意ではなく、コードが要素を選択できない重複 ID を使用して後の要素から取り除かれている可能性が非常に高くなります。この場合、繰り返される要素にクラスまたはその他の属性を使用する必要があります。


無関係な提案として、data属性を使用して、イベントをバインドしている要素に値を直接アタッチしてみてください。ランダムで、結合されておらず、意味的に無意味な要素を DOM にダンプするのではありません。

テキストエリアはdata-conv-tracker属性を取得します:

<textarea class="comment_txt_r fses fft" data-conv-tracker="4695f1db2d" />

また、選択や DOM トラバーサルを追加することなく、コードが大幅に簡素化されます。

if(code == 13) {      
  var ctext = $(this).val();
  var relid = $(this).data('conv-tracker');
  alert(relid);
}
于 2012-09-20T13:34:33.193 に答える
0

HTML

交換<textarea class="comment_txt_r fses fft" />

<textarea class="comment_txt_r fses fft"></textarea>

JavaScript

$('#comments .conversation').each(function(i, conversation){    
    $('.comment_txt_r', conversation).keydown(function(e){
      if((e.keyCode ? e.keyCode : e.which) == 13) {      
        var ctext = $(this).val();
        var relid = $('.conv_tracker', conversation).val();
        alert(relid);
      }
    });
    // additional per conversation code
});

各会話を個別に実行することで、jQuery にフィルタリングする要素の小さなグループを与えます。

于 2012-09-20T13:47:23.757 に答える
0

行を変更する

var relid = $(this).closest('.conversation').children('input#conv_tracker').val();

var relid = $('#conv_tracker').val()

間違ったコンテキストで使用$(this)しています (コードでは $('.comment_txt_r') です)

于 2012-09-20T13:35:20.803 に答える
0

このように jQuery で入力を直接指定するだけ$('#conv_tracker').val()です。したがって、コードは次のようになります。

$(".comment_txt_r").keydown(function(e){
  var code = (e.keyCode ? e.keyCode : e.which);
  if(code == 13) {      
    var ctext = $(this).val();
    var relid = $('#conv_tracker').val();
    alert(relid);
  }
});
于 2012-09-20T13:35:41.313 に答える