Управление несколькими блоками комментариев, «установленными» на одной странице — различайте их и обрабатывайте правильно

У меня есть несколько полей комментариев к содержимому на одной странице, и у меня возникают проблемы с идентификацией их для правильной обработки — например, не имеет значения, где я пытаюсь опубликовать свой комментарий (из какого поля комментариев) — он всегда получает отправлено в поле первого комментария на странице, или я борюсь с вводом, чтобы очиститься после публикации своего комментария, но ввод очищается только в том же поле первого комментария. Вот что у меня есть: (АЯКС)

    $(function() {
     $(".comm").click(function() {
    var parentDiv = $(this).parent('.post_comment').next().children(":first");  
    var comment = $(this).parent('.post_comment').find('.comment').val();
     var name = document.getElementById("username").value;
     var idv = $(this).parent('.post_comment').find("#idv").val();
    var posthere =            $(this).parent().siblings('.wrap_comment').find('#wrap').attr('class');

   alert(idv);
  if(comment=='')
  {
    alert("Enter some text..");
     $("#content").focus();
      }
   else
        {
      $.ajax({
  type: "POST",
  url: "river_flow.php",
  data: 
  {  username: $("#username").val(),
     idv: $(this).parent('.post_comment').find(".idv").val(),
     comment: $(this).parent('.post_comment').find('.comment').val()},

    cache: false, 
   success: function(data){    
    $('#show').after(data);
    $(this).find('.comment').css('background-color','red');

   $("#content").focus();
    }})   
    return false;
        }})})

(HTML)

<div class='com'><button class='click_and_comment'>Give it a comment</button>

              <div class='post_comment'>
              <img class='end' src="img/end.png" alt='close'/>
                   <input type="hidden" id="username" value="<?php echo $_SESSION['username'] ?>" name='username'/>
                   <input type="hidden"class='idv' id="idv" value="<?php echo $row['idv']; ?>" name='idv'/>
                   <textarea type='text' class="input_comment comment"   placeholder='What do you think?' name='comment' id='comment' ></textarea>
                   <input type='submit' name='comment_submit' class="comment_submit comm" id='comm'/>

              </div>


                 <div class='wrap_comment' id="<?php echo $row['idv']; ?>" >


                 <div id="show" align="left" class="<?php echo $row['idv']; ?>" ></div>
                    <?php
                    $idvc = $row['idv'];

                    $query = " SELECT * FROM comments WHERE idvc= '$idvc' ORDER BY datec DESC;";

                    $result = mysqli_query($conn,$query);

                    while ($bow = mysqli_fetch_assoc($result)) {
       echo "<div class='each_comment' id='<?php echo $bow[idvc];?>' >".$bow['commentc']."</div> ";}

                    ?>
                 </div>

Итак, чтобы сформировать мою проблему в вопросе: как я могу размещать комментарии пользователей соответственно тому, где их «нужно» размещать, и как мне очистить только «текущий» или «этот» ввод - не всегда первым. Опять же - все работает просто идеально, проблема в том, что всегда есть более одного поля для комментариев, и мне нужно различать их и относиться к ним соответственно. Вот мои догадки, которые не работают (против меня бы здесь не было) и, пожалуйста, объясните, почему они не работают, хотя бы просто:

$(this).find('#comment').value = '';

не работает! возможно, он не «видит» этот атрибут. Но почему?! Так. вот мои предположения:

 $(this).parent('.post_comment').siblings('.wrap_comment').find('#show').after(data);

(это для комментария, и это мое предположение для очистки ввода :)

$(this).parent('.post_comment').find('#comment').val('');

Я нашел что-то вроде:

$('#комментарий').removeAttr('значение');

это не работает - я не говорю о чистой мертвой путанице, которую я получаю, когда этот материал не работает:

$(this).find('.comment').css('background-color','red');

Уф. Итак, я надеюсь, что кто-то может прояснить все это для меня. Я новичок, если честно. Спасибо!


person Donalda Donalda    schedule 06.04.2016    source источник
comment
Ok. можешь дать ссылку, пожалуйста?   -  person Donalda Donalda    schedule 06.04.2016
comment
stackoverflow.com/questions/36358422/   -  person shivgre    schedule 06.04.2016
comment
Спасибо, позвольте мне проверить, что я могу сделать, чтобы помочь здесь   -  person shivgre    schedule 06.04.2016
comment
ну вот! помогите пожалуйста с этим вопросом   -  person Donalda Donalda    schedule 06.04.2016
comment
Я не могу найти, где именно у вас возникла проблема, это определенная строка в вашем коде jquery?   -  person shivgre    schedule 06.04.2016
comment
$('#show').после(данные); document.getElementById('комментарий').value=''; здесь. неправильно публикует. не динамически в div с комментариями, которые пользователь выбрал для публикации, а всегда в первый. есть идеи?   -  person Donalda Donalda    schedule 06.04.2016
comment
Да, я думаю, вы отправляете запрос ajax, когда пользователь комментирует. Как пользователи комментируют, это кнопка отправки или событие onblur при вводе комментария?   -  person shivgre    schedule 06.04.2016
comment
если ваш ajax запускается onblur (когда пользователь щелкает в другом месте после ввода комментария), вы можете использовать $(this), чтобы узнать, какое поле комментария было введено, а затем сохранить это значение в переменной, а затем соответственно ответить в вашем ajax   -  person shivgre    schedule 06.04.2016
comment
Я отредактировал это! проверить это.   -  person Donalda Donalda    schedule 06.04.2016
comment
Опубликованный ответ, пожалуйста, проверьте, я не видел никаких других полей для комментариев, кроме одного внутри вашего основного div с классом = com   -  person shivgre    schedule 06.04.2016


Ответы (1)


Используйте приведенный ниже скрипт и замените соответствующий скрипт этим кодом. Я не нашел несколько полей для комментариев внутри вашего div с class="com", поэтому я предположил, что он присутствует только внутри этого div и больше нигде:

$(function() {
        $(".com").click(function() {

            //##############################$(this) here refers to div with class="com" as this is the element on which click event has happened#####################
            var myThis = $(this);
            //var parentDiv = $(this).parent('.post_comment').next().children(":first");  

            //since div with class="post_comment" is inside div with class="com" so it is child to that div and not parent
            var parentDiv = $(this).find('.post_comment').next().children(":first"); 

            //var comment = $(this).parent('.post_comment').find('.comment').val();
            var comment = $(this).find('.post_comment .comment').val();//find element with class="comment" whose parent is div with class="post_comment"

            var name = document.getElementById("username").value;

            //var idv = $(this).parent('.post_comment').find("#idv").val();
            var idv = $(this).find(".post_comment #idv").val();//find element with id="idv" whose parent is div with class="post_comment"

            //####Not sure what is the use of below statement
            var posthere = $(this).find('.wrap_comment #wrap').prop('class');

            alert(idv);
            if (comment == '')
            {
                alert("Enter some text..");
                $("#content").focus();
            }
            else
            {
                $.ajax({
                    type: "POST",
                    url: "river_flow.php",
                    data: {username: $("#username").val(),
                                idv: idv,
                                comment: comment 
                    },
                    cache: false,
                    success: function (data) {
                        $('#show').after(data);
                        //### $(this) here will not point to your div with class="com" as it is in different context inside your ajax success function
                        //##$(this).find('.comment').css('background-color', 'red');
                        myThis.find('.comment').css('background-color', 'red');

                        $("#content").focus();
                    }
                });
                return false;
            }
        });
    });
person shivgre    schedule 06.04.2016