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 类读取输入的值(代码中的第 4 行,value="4695f1db2d")。我想读取这个值。当有人在 textarea 中按 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 在页面内必须是唯一的,所以没有理由通过and上下遍历 DOM children,然后通过 ID 进行选择。只需按 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

换行

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 回答
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 回答