Lately, I've been trying to use pure JavaScript instead of jQuery. As I've read more and more about pure JS, I didn't think it was that hard, or that much of a difference in the actual code, and of course it's a little bit faster.
This was until today, when I converted a whole 70-line script from jQuery to JavaScript, and although I've checked my new code for errors on jslint.com, it won't work. Before posting the code, and the difference, what I essentially did was to convert .on("change"
with .addEventListener("change"
along with replacing other jQuery functions and selectors.
Part of the working jQuery code:
jQuery("form.abo input").change(function() {
if(jQuery("#likerdudanse input[value='ja']").is(":checked") || jQuery("form input[value='Tilknyttet en danseklubb']").is(":checked")) {
jQuery("#jeglikerdanse").removeAttr("style");
if(jQuery("form input[value='Tilknyttet en danseklubb']").is(":checked")) {
jQuery("#likerdudanse").hide();
}
else {
jQuery("#likerdudanse").removeAttr("style");
}
}
else {
jQuery("#jeglikerdanse").hide();
jQuery("#likerdudanse").removeAttr("style");
}
if(jQuery("form fieldset:first-child input[value='bestille et abonnement']").is(":checked")) {
jQuery("#hardukode").removeAttr("style");
jQuery("#tskjorte").removeAttr("style");
if(jQuery("#hardukode input[value='ja']").is(":checked")) {
jQuery("#hardukode label:last-of-type, #hardukode br, #hardukode > input:last-of-type").removeAttr("style");
jQuery("#tskjorte").hide();
}
else {
jQuery("#hardukode label:last-of-type, #hardukode br, #hardukode > input:last-of-type").hide();
jQuery("#tskjorte").removeAttr("style");
}
if(jQuery("#tskjorte input[value='ja']").is(":checked")) {
jQuery("#tskjorte #i, #tskjorte #j, #tskjorte label[for='i'], #tskjorte label[for='j'], #tskjorte br").removeAttr("style");
}
else {
jQuery("#tskjorte #i, #tskjorte #j, #tskjorte label[for='i'], #tskjorte label[for='j'], #tskjorte br").hide();
}
}
else {
jQuery("#hardukode").hide();
jQuery("#tskjorte").hide();
}
}).change();
My new trying-so-hard pure JavaScript code that doesn't work at all.
document.querySelector("form#abo input").addEventListener("change", function(){
if(document.querySelector("form fieldset:first-child input[value='bestille et abonnement']:checked")) {
document.getElementById("hardukode").removeAttribute("style");
document.getElementById("tskjorte").removeAttribute("style");
if(document.querySelector("#hardukode input[value='ja']:checked")) {
document.querySelectorAll("#hardukode label:last-of-type, #hardukode br, #hardukode > input:last-of-type").removeAttribute("style");
document.getElementById("tskjorte").style.display = "none";
}
else {
document.querySelectorAll("#hardukode label:last-of-type, #hardukode br, #hardukode > input:last-of-type").style.display = "none";
document.getElementById("tskjorte").removeAttribute("style");
}
if(document.querySelector("#tskjorte input[value='ja']:checked")) {
document.querySelectorAll("#tskjorte #i, #tskjorte #j, #tskjorte label[for='i'], #tskjorte label[for='j'], #tskjorte br").removeAttribute("style");
}
else {
document.querySelectorAll("#tskjorte #i, #tskjorte #j, #tskjorte label[for='i'], #tskjorte label[for='j'], #tskjorte br").style.display = "none";
}
}
else {
document.getElementById("tskjorte").style.display = "none";
document.getElementById("hardukode").style.display = "none";
}
if(document.querySelector("#likerdudanse input[value='ja']:checked") || document.querySelector("form input[value='Tilknyttet en danseklubb']:checked")) {
document.getElementById("jeglikerdanse").removeAttribute("style");
if(document.querySelector("form input[value='Tilknyttet en danseklubb']:checked")) {
document.getElementById("likerdudanse").style.display = "none";
}
else {
document.getElementById("likerdudanse").removeAttribute("style");
}
}
else {
document.getElementById("jeglikerdanse").style.display = "none";
document.getElementById("likerdudanse").removeAttribute("style");
}
});
Someone skilled at this, please help, that would be great.
jQuery fiddle (desired behaviour) // non-effecting JavaScript fiddle