Как работает динамический контент jQuery?
Я не знаю, так ли это называется, но я пытаюсь создать какую-то интерактивную страницу, которая меняет контент на основе серии вопросов, на которые пользователь может ответить "Да" или "Нет". Вот упрощенная версия кода для лучшего понимания.
HTML:
<div class="container">
<h1>Some question?</h1>
<h2 id="yes" role="button">Yes</h2>
<h2 id="no" role="button">No</h2>
</div>
JQuery:
$(function() {
var question = $("h1");
var yes = $("#yes");
var no = $("#no");
$(yes).click(function() {
question.text("Some text. Some other question?");
});
$(yes).click(function() {
question.text("Different text. Different question?")
});
});
Теперь я хочу сделать следующее: если бы ответ пользователя на первый вопрос (тот, что в HTML) был "да", тогда он отобразил бы второй вопрос (первый в jQuery), и если его ответ на него был "да" "это будет отображать следующий вопрос и так далее. Но он просто переходит к последнему вопросу, указанному в jQuery, когда пользователь нажимает "да".
Как мне это контролировать? Это неправильный путь к тому, чего я пытаюсь достичь? Я нуб, очень жаль, если не имеет особого смысла.
Изменить: Теперь, как мне написать заявление, если будет $("<img src="#">).appendTo(container);
когда пользователь дойдет до третьего вопроса?
2 ответа
$(function() {
var count = 0;
var question = $("h1");
var yes = "#yes";
var no = "#no";
var questions = [
"Some text. Some other question?",
"Different text. Different question?"
];
$(yes).click(function() {
if(count == 2){
$("<img src='#'>").appendTo(container);
}
question.text(questions[count]);
count++;
});
});
Попробуйте этот код.
Когда ты звонишь
$(yes).click(function() {
question.text("Some text. Some other question?");
});
$(yes).click(function() {
question.text("Different text. Different question?")
});
После выполнения первого $(yes).click
, продолжает выполнять 2-й $(yes).click
отсюда и проблема, с которой вы столкнулись.
Мой предложенный подход состоит в том, чтобы поместить все ваши "вопросы" в массив, а затем использовать индекс для заполнения <h1>
тег
Еще один способ сделать это: все вопросы уже есть на странице, но скрыты (кроме первого). Это не настоящий динамический контент, но достижение того же результата. Обратите внимание, как пользовательские значения могут быть сохранены, а затем отправить.
function storeResponse(id_question,value){
$('#result'+id_question).val(value);
$('#container'+id_question).addClass("hidden");
if (id_question<4){
$('#container'+(id_question+1)).removeClass("hidden");
} else {
$('#results').submit();
}
}
.hidden {display:none;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container1" class="container">
<h1>1 Some question?</h1>
<h2 id="yes" onclick="storeResponse(1,1)" role="button">Yes</h2>
<h2 id="no" onclick="storeResponse(1,0)" role="button">No</h2>
</div>
<div id="container2" class="container hidden" >
<h1>2 Some question?</h1>
<h2 id="yes" onclick="storeResponse(2,1)" role="button">Yes</h2>
<h2 id="no" onclick="storeResponse(2,0)" role="button">No</h2>
</div>
<div id="container3" class="container hidden">
<h1>3 Some question?</h1>
<h2 id="yes" onclick="storeResponse(3,1)"role="button">Yes</h2>
<h2 id="no" onclick="storeResponse(3,0)" role="button">No</h2>
</div>
<div id="container4" class="container hidden">
<h1>4 Some question?</h1>
<h2 id="yes" onclick="storeResponse(4,0)" role="button">Yes</h2>
<h2 id="no" onclick="storeResponse(4,0)" role="button">No</h2>
</div>
<form id="results" action="..." method="...">
<input type="hidden" id="result1" name="result1" value="">
<input type="hidden" id="result2" name="result1" value="">
<input type="hidden" id="result3" name="result1" value="">
<input type="hidden" id="result4" name="result1" value="">
</form>