Как добавить в каждый div только один раз - PullRequest
2 голосов
/ 08 июля 2019

У меня есть несколько вопросов, где пользователь нажимает кнопки «да» или «нет» и хочет, чтобы значения его щелчков добавлялись в пустой класс, отображающий то, что они выбрали.

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

Что у меня есть -

$(function() {
var answer = $(".answer");
answer.each(function(index) {
$(this).on("click", function(){
  var userAnswer = $(this).attr("data-id");
  var displayAnswer = $(".display-answer");
  displayAnswer.each(function() {
      $(this).append(userAnswer);
    });
   });
  });
});

HTML

<div class="question-wrap">
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Maiores, ea maxime velit hic tenetur, animi. Similique dolorem modi quos eius in, unde, sapiente, non ipsa aliquam accusamus quis facilis enim.</p>
        <div class="answer-buttons">
            <div class="answer yes"><p>Yes</p></div>
            <div class="answer no"><p>No</p></div>
        </div>
        <div class="display-answer"></div>
    </div>

Ответы [ 3 ]

1 голос
/ 08 июля 2019

Спасибо за предоставление HTML.Это значит, что мы можем помочь!

Ответ U_mulder будет абсолютно сработать, если структура остается точно такой же.Мое предложение использовать индекс не будет работать, потому что есть два класса «ответа» на вопрос.

В фрагменте, который я добавил здесь, вы увидите, что я сначала использую .parents(".question-wrap").eq(0), чтобы найти div для переноса вопроса, затем .children(".display-answer").eq(0), чтобы найти дисплей Div..children() только поиск среди непосредственных потомков элемента.Если вам нужно посмотреть дальше вниз (напротив parents()), используйте .find().

Здесь вы увидите это в действии (используйте .text(), чтобы получить значение, видя, что данных нет-id атрибут)

$(function() {
var answer = $(".answer");
answer.each(function(index) {
$(this).on("click", function(){
  var userAnswer = $(this).text();
  var displayAnswer = $(this).parents(".question-wrap").eq(0).children(".display-answer").eq(0);
  displayAnswer.text(userAnswer);
   });
  });
});
.question-wrap {
  flex: 1;
  min-width: 150px;
  display: inline-block;
  margin-left: 10px;
}

.answer {
  cursor: pointer;
}

.display-answer {
  height:20px;
  padding: 10px;
  border: 1px solid lightgreen
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div style="display: flex; flex-wrap: wrap">
<div class="question-wrap">
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Maiores, ea maxime velit hic tenetur, animi.</p>
    <div class="answer-buttons">
        <div class="answer yes"><p>Yes</p></div>
        <div class="answer no"><p>No</p></div>
    </div>
    <div class="display-answer"></div>
</div>
<div class="question-wrap">
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Maiores, ea maxime velit hic tenetur, animi.</p>
    <div class="answer-buttons">
        <div class="answer yes"><p>Yes</p></div>
        <div class="answer no"><p>No</p></div>
    </div>
    <div class="display-answer"></div>
</div>

<div class="question-wrap">
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Maiores, ea maxime velit hic tenetur, animi.</p>
    <div class="answer-buttons">
        <div class="answer yes"><p>Yes</p></div>
        <div class="answer no"><p>No</p></div>
    </div>
    <div class="display-answer"></div>
</div>

<div class="question-wrap">
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Maiores, ea maxime velit hic tenetur, animi.</p>
    <div class="answer-buttons">
        <div class="answer yes"><p>Yes</p></div>
        <div class="answer no"><p>No</p></div>
    </div>
    <div class="display-answer"></div>
</div>

<div class="question-wrap">
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Maiores, ea maxime velit hic tenetur, animi.</p>
    <div class="answer-buttons">
        <div class="answer yes"><p>Yes</p></div>
        <div class="answer no"><p>No</p></div>
    </div>
    <div class="display-answer"></div>
</div>
</div>
1 голос
/ 08 июля 2019

Вот способ получить результат, который вы описываете

    $(function(){
    	$(".answer").click(function(){ /*You can register the click handler easily in one step*/
      	var userAnswer = $(this).attr("data-id");
        $(this).parent().siblings(".display-answer").append(userAnswer); /*First, find the parent, then the "display-answer" siblings*/
      });
    
    });
p{
  font-family:sans-serif;
}

.answer{
  border:1px solid black;
  text-align:center;
  flex-grow:100;
  width:100px;
  display:inline-block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="question-wrap">
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Maiores, ea maxime velit hic tenetur, animi. Similique dolorem modi quos eius in, unde, sapiente, non ipsa aliquam accusamus quis facilis enim.</p>
    <div class="answer-buttons">
      <div class="answer yes" data-id="yes"><p>Yes</p></div>
      <div class="answer no" data-id="no"><p>No</p></div>
    </div>
    <div class="display-answer"></div>
</div>
<div class="question-wrap">
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Maiores, ea maxime velit hic tenetur, animi. Similique dolorem modi quos eius in, unde, sapiente, non ipsa aliquam accusamus quis facilis enim.</p>
    <div class="answer-buttons">
      <div class="answer yes" data-id="yes"><p>Yes</p></div>
      <div class="answer no" data-id="no"><p>No</p></div>
    </div>
    <div class="display-answer"></div>
</div>
1 голос
/ 08 июля 2019

Простой пример, основанный на вашей разметке:

$('.answer').on('click', function() {
    $(this).parent().next().html($(this).html());
    // `$(this).html()` gets the html of an element you clicked on
    // `$(this).parent().next()` - gets `.display-answer` element which 
    // is located `next` to the `parent` of the element you clicked
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script>
    <div class="question-wrap">
        <p>Question 1.</p>
        <div class="answer-buttons">
            <div class="answer yes"><p>Yes</p></div>
            <div class="answer no"><p>No</p></div>
        </div>
        <div class="display-answer"></div>
    </div>
    <div class="question-wrap">
        <p>Question 2.</p>
        <div class="answer-buttons">
            <div class="answer yes"><p>Yes</p></div>
            <div class="answer no"><p>No</p></div>
        </div>
        <div class="display-answer"></div>
    </div>
    <div class="question-wrap">
        <p>Question 3.</p>
        <div class="answer-buttons">
            <div class="answer yes"><p>Yes</p></div>
            <div class="answer no"><p>No</p></div>
        </div>
        <div class="display-answer"></div>
    </div>
...