0

我想写一点聊天。在第一次加载页面时,将从数据库中加载旧消息和答案。所以我有很多不同ID的消息。对于每条消息,我都有一个回复链接。当您单击它时,会出现一个消息框。我的问题是,当用户按键盘上的 Enter 键时,我想发送回复。

回复 textareas 是用 jquery 添加的,所以我不能使用 $(textarea).keypress(.....)

这是我的代码示例:

 <div id="container" style="">
<div id="main" role="main">
    <div id="shoutbox_container">
        <div id="shoutbox_content" style="margin-top:20px;"></div>
    </div>
</div>

for (id = 0; id < 5; id++) {
   var res_container = '<div id="shoutbox_entry_' + id + '" class="entry entrybox">';
   res_container += 'Mr Idontknow wrote:' + id + '. Message ';
   res_container += ' <span class="reply" id="reply" data-parentid="' + id + '">reply</span> ';
   res_container += '<div class="replytextbox replybox" id="reply_textbox_' + id + '" style="display:none;">';
   res_container += '<textarea class="replytext" name="antwort" id="antwort_' + id + '" data-parentid="' + id + '"></textarea>';
   res_container += '<button id="replysend">send</button> ';
   res_container += '</div>';
   res_container += '</div><br><br>';
   $('#shoutbox_content').prepend(res_container);   } 

//reply textarea   
$('#shoutbox_content').on('click', '#reply', function () {
   var parentid = $(this).data('parentid');
   $('#shoutbox_content').find('#reply_textbox_' + parentid).toggle();
});

//reply send button
$('#shoutbox_content').on('click', 'button', function () {
   var parentid = $(this).prev('textarea').data('parentid');
   var reply = $(this).prev('textarea').val();
   $(this).prev('textarea').val('');
   $('#shoutbox_content').find('#reply_textbox_' + parentid).hide();

   if (reply.length > 0) {
       alert('save reply ' + parentid);
   }
});

// when the client hits ENTER on their keyboard
$('#shoutbox_content').keypress('textarea', function (e) {
   if (e.which == 13) {
       console.log($(this).find('textarea'));
       var test = $(this).attr('data-parentid');
       alert('Enter ' + test);
       $(this).blur();
       $(this).next('#replysend').focus().click();
   }
});

它有效,但我不知道发送了哪个 ID。有谁知道我如何找出用户在哪个回复文本区域中按下了 Enter 键?

4

1 回答 1

4

因此,使用 .on() 函数,就像您正在使用的其他事件声明一样:

// when the client hits ENTER on their keyboard
$('#shoutbox_content').on('keypress','textarea', function (e) {

   //Retrieve ID of the textarea
   var id = $(this).attr('id');

   //Do what you want with id variable

   if (e.which == 13) {
       console.log($(this).find('textarea'));
       var test = $(this).attr('data-parentid');
       alert('Enter ' + test);
       $(this).blur();
       $(this).next('#replysend').focus().click();
   }
});

然后通过检查其 ID 或其他属性来检索事件发生的文本区域,如下所示:$(this).attr('id')

于 2013-06-01T18:34:30.603 回答