0

I have a problem with a button attribute. It does not matter whether YES or NO is changed. I suspect the problem here is button.disabled because it does not highlight the word "disabled".

window.onload = function() 
{
    var button = document.getElementsByName("button");
    var regulamin = document.getElementsByName("accept");
 
  //console.log(button);

   for (var i = 0; i < regulamin.length; i++)
   {
       regulamin[i].onclick = function()
       { 
        //alert(this.value === "true");  <-- here is OK
           button.disabled = (this.value === "true");  <-- not OK
       };
   }

};
<form>
    <div>
        <label><input type="radio" name="accept" value="true" checked>NO</label>
        <label><input type="radio" name="accept" value="false">YES</label>
    </div>
    <button type="submit" name="button" disabled>REGISTER</button>
</form>
thanksd
  • 54,176
  • 22
  • 157
  • 150

4 Answers4

0

DEMO

window.onload = function() 
{
    var button = document.getElementsByName("button")[0];
    var regulamin = document.getElementsByName("accept");
 
  console.log(button);

   for (var i = 0; i < regulamin.length; i++)
   {
       regulamin[i].onclick = function()
       { 
        //alert(this.value === "true");  <-- here is OK
           button.disabled = (this.value === "true");  
       };
   }

};
<form>
    <div>
        <label><input type="radio" name="accept" value="true" checked>NO</label>
        <label><input type="radio" name="accept" value="false">YES</label>
    </div>
       <button type="submit" name="button" disabled>REGISTER</button>
</form>

getElementsByName reutrns an array of element having the same name. So you need to choose which element you want. You have only one button so you can access the element like document.getElementsByName("button")[0]

Durga
  • 15,263
  • 2
  • 28
  • 52
0

You could

  • target your named radio buttons
  • forEach → assign a change event handler
  • retrieve the .closest (parent) form
  • than go back down the DOM and find your type="submit"

Chrome  icon Firefox icon Edge    icon Opera   icon Safari  icon9

Array.from(document.querySelectorAll("[name='accept']")).forEach( radio => {
  radio.addEventListener("change", function() {
    this.closest("form").querySelector("[type='submit']").disabled = this.value === "true";
  });
});
<form>
  <div>
    <label><input type="radio" name="accept" value="true" checked>NO</label>
    <label><input type="radio" name="accept" value="false">YES</label>
  </div>
  <button type="submit" name="button" disabled>REGISTER</button>
</form>

With the above you can even have multiple forms on a single page - since the encapsulated DOM traversing.

Array.from(document.querySelectorAll("[name='accept']")).forEach( radio => {
  radio.addEventListener("change", function() {
    this.closest("form").querySelector("[type='submit']").disabled = this.value === "true";
  });
});
<h3>Multiple forms</h3>

<form>
  <div>
    <label><input type="radio" name="accept" value="true" checked>NO</label>
    <label><input type="radio" name="accept" value="false">YES</label>
  </div>
  <button type="submit" name="button" disabled>REGISTER</button>
</form>

<form>
  <div>
    <label><input type="radio" name="accept" value="true" checked>NO</label>
    <label><input type="radio" name="accept" value="false">YES</label>
  </div>
  <button type="submit" name="button" disabled>REGISTER</button>
</form>

<form>
  <div>
    <label><input type="radio" name="accept" value="true" checked>NO</label>
    <label><input type="radio" name="accept" value="false">YES</label>
  </div>
  <button type="submit" name="button" disabled>REGISTER</button>
</form>
Roko C. Buljan
  • 196,159
  • 39
  • 305
  • 313
-1

You need to change your button from a "name" to an "id" and then get its element by "id". See the code below. The button toggle on the no yes now works correctly.

HTML:

    <form>
        <div>
            <label><input type="radio" name="accept" value="true" checked>NO</label>
            <label><input type="radio" name="accept" value="false">YES</label>
        </div>
        <button type="submit" id="button">REGISTER</button>
    </form>

Javascript:

window.onload = function () {
    var button = document.getElementById("button");
    var regulamin = document.getElementsByName("accept");
    button.disabled = true;
    //console.log(button);

    for (var i = 0; i < regulamin.length; i++) {
        regulamin[i].onclick = function () {
            //alert(this.value === "true");  <-- here is OK
            if (button.disabled) {
                button.disabled = false;
            } else {
                button.disabled = true;
            }                
        };
    }
};
JJWillMC
  • 121
  • 1
  • 7
-2

I think your name property of input element is same and you are getting getElementByName. Its getting both as true.

Try to give other input element with different name property.

Rahul Beniwal
  • 639
  • 4
  • 9