получить значение динамически созданного ввода - PullRequest
0 голосов
/ 16 декабря 2018

это код, сгенерированный автоматически в соответствии с информацией, содержащейся в базе данных

               each p in posts              
                .w3-container.w3-card.w3-black.w3-round.w3-margin
                    p= p.title
                    input(type='hidden', id="idPost" value=p._id)
                    if p.picture
                        img.w3-margin-bottom(src="images/"+p.picture style="width:100%")
                    p= p.content
                    .w3-container.w3-card(id="commentSection") 
                        if p.comments
                            each m in p.comments
                                p= m.user.split(":")[1] + "        "+ m.message
                    textarea(id="NewComment", cols="80%", rows="1" placeholder="Enter a new comment")

Я пытаюсь получить значение ввода idPost, но пока не повезло.Я пробовал некоторые подходы, такие как $('[id=idPost]').eq(2).val(), но в этом случае мне нужно знать предыдущий индекс, который есть, и я не знаю.

Я попробовал также что-то вроде этого, я думаю, что это то, что я хочу, но я не заставляю его работать

var num = $(this).closest('w3-container').find(".idPost").val();

Этот я ищу класс вместо идентификатора, который показан в кодевыше, но ни одна из этих работ

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Поскольку ни одно из решений, где работает, я что-то пробовал, и это сработало

pug

each p in posts              
            .w3-container.w3-card.w3-black.w3-round.w3-margin
                p= p.title 
                if p.picture
                    img.w3-margin-bottom(src="images/"+p.picture style="width:100%")
                p= p.content
                .w3-container.w3-card(class="commentSection" name=p._id) 
                    if p.comments
                        each m in p.comments
                            p= m.user.split(":")[1] + "        "+ m.message
                textarea(id="NewComment", cols="80%", rows="1" placeholder="Enter a new comment")

Теперь в моем jquery я просто получаю текущую текстовую область, которую я нажимаю "ввод", а затембудет зацикливать все «контейнеры» с классом commentSection и проверять, совпадает ли имя атрибута текущего текстового поля с правым именем commentSection.Если это правда, то я в нужном месте и могу сделать все остальное.

$(document).on('keydown', function(e) {
    var targetInput = $(e.target);
      if(targetInput.is('textarea')) { 
         if(e.which == 13){ 
           e.preventDefault();
           $('.commentSection').each(function() {
               if($(this).attr("name")==targetInput.attr('name')){
                $(this).append('<p>'+targetInput.val()+'</p>');
               }
            }); 
          // $("#commentSection").append('<p>'+targetInput.val()+'</p>');
           ajaxPost(targetInput.val(),targetInput.attr('name'),
           p=> alert(JSON.stringify(p)),
           e =>{
               alert('AJAX ERROR:'+JSON.stringify(e));
               console.log("AJAX ERROR:"+JSON.stringify(e));
           });
           targetInput.val('');
      }
       }
   });  

Бит неряшливо, но работает

0 голосов
/ 16 декабря 2018

input (type = 'hidden', id = "idPost" value = p._id)

здесь idPost является идентификатором ввода, поэтому вам нужно найти # idPost

var num = $. (это) .parents ( 'w3-контейнер') найти ( "#") idPost Val ();.

...