Вот мой подход к этому, я надеюсь, что он делает то, что вы хотите. Он удаляет класс active
из первого элемента этого класса, обменивает его с классом step-done
, а затем добавляет класс active
к следующему шагу - он должен работать для всех четырех шагов.
$('#advance').click(function(){
var active = $(".nav-tabs .active:first");
active.removeClass("active");
active.addClass("step-done");
active.next("li").addClass("active");
});
.active{
background:yellow;
}
.step-done{
background:lime;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="nav nav-tabs" role="tablist">
<li role="presentation" class="active">
<a aria-controls="select-room"><span class="mg-bs-tab-num">1</span><span class="mg-bs-bar"></span>Select Room</a>
</li>
<li role="presentation" class="">
<a aria-controls="personal-info"><span class="mg-bs-tab-num">2</span><span class="mg-bs-bar"></span>Personal Info</a>
</li>
<li role="presentation">
<a aria-controls="payment"><span class="mg-bs-tab-num">3</span><span class="mg-bs-bar"></span>Payment</a>
</li>
<li role="presentation">
<a aria-controls="thank-you"><span class="mg-bs-tab-num">4</span>Thank You</a>
</li>
</ul>
<button id="advance">Advance Step</button>
Тело запроса x-www-form-urlencoded
должно быть name=BARNEY%20MCGREW%21&rating=90
.
Вы отправляете запрос по fetch
с телом '{"name":"BARNEY MCGREW!","rating":90}'
.
Поскольку нет =
, вся строка JSON считается именем параметра с пустым значением.
Итак, вам дан объект из req.body
, где в качестве ключа выступает строковый JSON.
Создайте URLSearchParams
, передав ваши данные конструктору - замените JSON.stringify
.
fetch('http://localhost:1234/acts/create', {
method: 'POST',
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
body: new URLSearchParams({
name: 'BARNEY MCGREW!',
rating: 90,
})
})
Ваше тело запроса fetch
теперь должно быть name=BARNEY%20MCGREW%21&rating=90
.
Это будет правильно проанализировано анализатором тела как содержимое x-www-form-urlencoded
.
Если URLSearchParams
не определено, есть пакеты npm, которые его предоставят. В противном случае все, что он делает, это создает строку URL-параметров путем кодирования и объединения ключей и значений с помощью =
и объединения каждой пары с помощью &
, что можно сделать следующим образом:
function URLSearchParams(data) {
return Object.keys(data).map(key => {
return `${encodeURIComponent(key)}=${encodeURIComponent(data[key])}`;
}).join('&');
}