2

I have a toggle checkbox and 2 input fields. What I want to achieve is to disable the input fields when the checkbox is unchecked, and vice versa. Here's my code.

<div class="inline fields">
  <div class="four wide field">
    <div class="ui toggle checkbox">
      <input id="a4" name="a4" tabindex="0" class="hidden" type="checkbox">
      <label>A4</label>
    </div>
  </div>
  <div class="six wide field">
    <label>Grayscale</label>
    <div class="ui right labeled input">
      <div class="ui label">Php</div>
      <input name="gray" value="1.00" placeholder="0.00" type="text">
      <div class="ui basic label">/page</div>
    </div>
  </div>
  <div class="six wide field">
    <label>Colored</label>
    <div class="ui right labeled input">
      <div class="ui label">Php</div>
      <input name="colored" value="1.00" placeholder="0.00" type="text">
      <div class="ui basic label">/page</div>
    </div>
  </div>
</div>

and the javascript

$('.ui.checkbox').checkbox();

I've researched using behaviors for checkboxes like attach events, etc or using callbacks but I don't know how to use them properly. I've also tried implementing this but I think the .next() doesn't fit my problem. I tried experimenting and researching but I can't seem to find a solution.

3 Answers 3

1

The inputs should be disabled at the first instance. Then enabled whenever the box is checked.

$('#a4').change(function(){
  $('#gray').attr('disabled',!this.checked);
  $('#colored').attr('disabled',!this.checked);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="inline fields">
  <div class="four wide field">
    <div class="ui toggle checkbox">
      <input id="a4" name="a4" tabindex="0" class="hidden" type="checkbox">
      <label>A4</label>
    </div>
  </div>
  <div class="six wide field">
    <label>Grayscale</label>
    <div class="ui right labeled input">
      <div class="ui label">Php</div>
      <input id="gray" name="gray" value="1.00" placeholder="0.00" type="text" disabled>
      <div class="ui basic label">/page</div>
    </div>
  </div>
  <div class="six wide field">
    <label>Colored</label>
    <div class="ui right labeled input">
      <div class="ui label">Php</div>
      <input id="colored" name="colored" value="1.00" placeholder="0.00" type="text" disabled>
      <div class="ui basic label">/page</div>
    </div>
  </div>
</div>

Sign up to request clarification or add additional context in comments.

Comments

0

Use the on function with the parameter "change" to add an event listener to the checkbox changing, then inside the callback part use the input selector by name 'gray' so set the disabled property to the inverse of the checked state of the checkbox.

If you want to do this for all checkboxes in a form with many items, as long as they follow the same basic template design, you can use parent() and find() together to find the input elements of a certain type within a certain parent element.

$("input[type='checkbox']").on("change", function() {
  $(this).parent().parent().parent().find("input[type='text']").prop("disabled", !this.checked);
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="inline fields">
  <div class="four wide field">
    <div class="ui toggle checkbox">
      <input id="a4" name="a4" tabindex="0" class="hidden" type="checkbox" />
      <label>A4</label>
    </div>
  </div>
  <div class="six wide field">
    <label>Grayscale</label>
    <div class="ui right labeled input">
      <div class="ui label">Php</div>
      <input name="gray" value="1.00" placeholder="0.00" type="text" disabled="true">
      <div class="ui basic label">/page</div>
    </div>
  </div>
  <div class="six wide field">
    <label>Colored</label>
    <div class="ui right labeled input">
      <div class="ui label">Php</div>
      <input name="colored" value="1.00" placeholder="0.00" type="text" disabled>
      <div class="ui basic label">/page</div>
    </div>
  </div>
</div>


<div class="inline fields">
  <div class="four wide field">
    <div class="ui toggle checkbox">
      <input id="a4" name="a4" tabindex="0" class="hidden" type="checkbox" />
      <label>C4</label>
    </div>
  </div>
  <div class="six wide field">
    <label>Grayscale</label>
    <div class="ui right labeled input">
      <div class="ui label">Php</div>
      <input name="gray" value="1.00" placeholder="0.00" type="text" disabled="true">
      <div class="ui basic label">/page</div>
    </div>
  </div>
  <div class="six wide field">
    <label>Colored</label>
    <div class="ui right labeled input">
      <div class="ui label">Php</div>
      <input name="colored" value="1.00" placeholder="0.00" type="text" disabled>
      <div class="ui basic label">/page</div>
    </div>
  </div>
  <div class="six wide field">
    <label>Colored</label>
    <div class="ui right labeled input">
      <div class="ui label">Php</div>
      <input name="colored" value="1.00" placeholder="0.00" type="text" disabled>
      <div class="ui basic label">/page</div>
    </div>
  </div>
  <div class="six wide field">
    <label>Colored</label>
    <div class="ui right labeled input">
      <div class="ui label">Php</div>
      <input name="colored" value="1.00" placeholder="0.00" type="text" disabled>
      <div class="ui basic label">/page</div>
    </div>
  </div>
</div>

<div class="inline fields">
  <div class="four wide field">
    <div class="ui toggle checkbox">
      <input id="a4" name="a4" tabindex="0" class="hidden" type="checkbox" />
      <label>B4</label>
    </div>
  </div>
  <div class="six wide field">
    <label>Grayscale</label>
    <div class="ui right labeled input">
      <div class="ui label">Php</div>
      <input name="gray" value="1.00" placeholder="0.00" type="text" disabled="true">
      <div class="ui basic label">/page</div>
    </div>
  </div>
  <div class="six wide field">
    <label>Colored</label>
    <div class="ui right labeled input">
      <div class="ui label">Php</div>
      <input name="colored" value="1.00" placeholder="0.00" type="text" disabled>
      <div class="ui basic label">/page</div>
    </div>
  </div>
</div>

Comments

0

Using the link you provided, I came up with this solution.

$('#a4').change(function(){
  $('input[name=gray]').attr('disabled',!this.checked);
  $('input[name=colored]').attr('disabled',!this.checked);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="inline fields">
  <div class="four wide field">
    <div class="ui toggle checkbox">
      <input id="a4" name="a4" tabindex="0" class="hidden" type="checkbox" checked>
      <label>A4</label>
    </div>
  </div>
  <div class="six wide field">
    <label>Grayscale</label>
    <div class="ui right labeled input">
      <div class="ui label">Php</div>
      <input name="gray" value="1.00" placeholder="0.00" type="text">
      <div class="ui basic label">/page</div>
    </div>
  </div>
  <div class="six wide field">
    <label>Colored</label>
    <div class="ui right labeled input">
      <div class="ui label">Php</div>
      <input name="colored" value="1.00" placeholder="0.00" type="text">
      <div class="ui basic label">/page</div>
    </div>
  </div>
</div>

Now you might want to set some IDs on your text inputs so you don't have to use input[name=gray]. I personally prefer IDs to this kind of syntax.

EDIT:

Added checked attribute to the checkbox to reflect OP needs.

1 Comment

I ran you code snippet and the inputs are working at first instance even though the checkbox is unchecked.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.