【问题标题】:Prepend a div only on the form from where is submitted仅在提交的表单上添加 div
【发布时间】:2015-06-11 02:27:42
【问题描述】:

您好,我正在 nodejs 中制作应用程序。想法是一个人可以提出问题,其他人可以回答。我已经提出了一个问题部分,但只回复和显示 1 个问题的回复让我很困扰这个代码

function displayMsg(data){
            console.log(data);
            var name = data.name
            var msg = data.msg
            var id = data._id
    
            $messages.prepend("<div class='bubble'><strong>" + name + " says: " + "</strong>" + "<br/>" + msg + "<form id=" + id + " class='form-inline'><div class='form-group'><input type='text' class='form-control' id='reply" + id +"'></div><button type='submit' class='btn btn-default'>Reply</button></form><div id='replies" + id +"'></div></div>");       
        }

所以这个函数显示了一个新问题,我添加了一个回复表单。我为每个表单提供了提交问题的 ID,因此每个表单都有一个唯一的 ID。回复的输入字段和我想要添加回复的回复 div 也是如此。

现在我能够建立一个回复系统,但回复显示在每个问题下方。

我希望只在他们回复的问题下方显示回复

你可以在这个小提琴中看到我完整的 javascript(jquery) 代码。显然不行,因为它是 Jade 和 node + socketio https://jsfiddle.net/bvLnLkwL/3/

【问题讨论】:

  • 请做一个小提琴。
  • 将表单的 id 属性值用引号括起来
  • 如果 $messages.prepend() 将它放在错误的位置,您可能还想将弹出窗口放在其他地方
  • 这是一个node项目,而且涉及到一堆socketio,所以制作小提琴有点困难
  • 我认为问题在于我只能在函数内部抓取回复表单我需要能够在函数外部抓取它

标签: javascript jquery node.js


【解决方案1】:

我不是您使用的特定技术的专家,但乍一看,我会说问题在于您的听众都在收听相同的全局 new reply 事件,而没有确定是否回复与他们的特定问题 ID 相关。

除非这是 SocketIO 自己处理的事情,否则您可能希望为每个表单创建不同的回复通道来侦听,或者检查侦听器中的问题 ID。

例如,发送带有数据的 ID:

socket.on('new_reply', function(data){
    if(data.question === id) {
        $repliesDiv.prepend("<div id='areply'>"+data.reply+"</div>");
        $('#areply').addClass("fadeInTop");
    }
});

或制作独特的“频道”,如下所示:

socket.on('new_reply.' + id, function(data){
    $repliesDiv.prepend("<div id='areply'>"+data.reply+"</div>");
    $('#areply').addClass("fadeInTop");
});

我不确定最后一个是否/如何影响性能。

【讨论】:

  • 我对 SocketIO 很陌生,所以我不知道它到底是如何工作的。但是你的推理很有道理,我只是不知道如何应用它。
  • @user1439495 发送带有响应数据的问题 ID,例如,您可以检查侦听器中的 ID。或者收听名称中包含 id 的事件,这样您就知道所有回复都与该问题有关。
  • 我不知道该怎么做
  • @user1439495 查看更新的答案,它显示了一些基本代码。只需确保以类似的方式在回复发送方添加 ID,它应该可以工作。 (我不能给你举个例子,因为我不知道你的代码在那一边是什么样子的)。
  • 好的,我会尝试一些东西,让你知道它是否有效:) 非常感谢!
猜你喜欢
  • 1970-01-01
  • 2012-10-08
  • 1970-01-01
  • 2022-07-19
  • 1970-01-01
  • 2013-07-20
  • 1970-01-01
  • 1970-01-01
  • 2016-05-05
相关资源
最近更新 更多