переписать код javascript на jQuery
const navigateToFormStep = (stepNumber) => {
document.querySelectorAll(".form-step").forEach((formStepElement) => {
formStepElement.classList.add("d-none");
});
document.querySelectorAll(".form-stepper-list").forEach((formStepHeader) => {
formStepHeader.classList.add("form-stepper-unfinished");
formStepHeader.classList.remove("form-stepper-active", "form-stepper-completed");
});
document.querySelector("#step-" + stepNumber).classList.remove("d-none");
};
document.querySelectorAll(".btn-navigate-form-step").forEach((formNavigationBtn) => {
formNavigationBtn.addEventListener("click", () => {
const stepNumber = parseInt(formNavigationBtn.getAttribute("step_number"));
navigateToFormStep(stepNumber);
});
});
Попытался переписать самостоятельно,думаю что сделал много ошибок. Хотя консолька не ругается.
function navigateToFormStep($stepNumber) {
$('.form-step').each(($formStepElement), function(){
$formStepElement.addClass('d-none')
})
$('.form-stepper-list').each(($formStepHeader), function(){
$formStepHeader.addClass('form-stepper-unfinished')
$formStepHeader.removeClass('form-stepper-unfinished')
$formStepHeader.removeClass('form-stepper-completed')
})
$('#step-' + $stepNumber).removeClass('d-none')
}
(function($){
$('.btn-navigate-form-step').each(($formNavigationBtn), function() {
$formNavigationBtn.on('click', function(){
var stepNumber = parseInt($formNavigationBtn.attr('step_number'))
navigateToFormStep($stepNumber)
})
})
})
И код теперь не работает. Возможно,допущены какие критические ошибки. Пытался править каждую строчку кода js и переводить её в jquery.
Ответы (2 шт):
Автор решения: Jean-Claude
→ Ссылка
Ты неправильно прочитал описание функции each(), ты думаешь, что у each() два аргумента, но на самом деле один аргумент - функция с двумя аргументами.
.each( function )
function
Type: Function( Integer index, Element element )
A function to execute for each matched element.
Добавил еще парочку оптимизаций, к элементу можно обратиться с помощью this, предварительно обернув его jquery, в итоге код такой:
function navigateToFormStep(stepNumber) {
$('.form-step').each(function() {
$(this).addClass('d-none')
});
$('.form-stepper-list').each(function() {
$(this).addClass('form-stepper-unfinished')
$(this).removeClass('form-stepper-active')
$(this).removeClass('form-stepper-completed')
});
$('#step-' + stepNumber).removeClass('d-none');
}
$('.btn-navigate-form-step').each(function() {
$(this).on('click', function() {
var stepNumber = parseInt($(this).attr('step_number'));
console.log(stepNumber);
navigateToFormStep(stepNumber);
})
})
div {
border: 1px solid grey;
margin: 2px;
}
.d-none {
border: 0;
}
.form-stepper-unfinished {
border: 1px solid red;
}
<script src="https://code.jquery.com/jquery-3.1.0.js"></script>
<div class="form-step">form-step</div>
<div class="form-stepper-list">
<div id="step-1" class="d-none">step-1</div>
<div id="step-2" class="d-none">step-2</div>
</div>
<button class="btn-navigate-form-step" step_number="1">button1</button>
<button class="btn-navigate-form-step" step_number="2">button2</button>
Автор решения: Rudi
→ Ссылка
Тоже что и у @Jean-Claude только 10 строк..
function navToF(nStep) {
$(".form-step").addClass("d-none");
$(".form-stepper-list").addClass("form-stepper-unfinished");
$(".form-stepper-list").removeClass("form-stepper-active form-stepper-completed");
$("#step-" + nStep).removeClass("d-none");
}
$(".btn-navigate-form-step").on('click',function(){
const nStep = parseInt($(this).attr("step_number"));
navToF(nStep);
})