Has class is not working jquery with Parent

Viewed 43

Hi I am trying to find whether div hasclass. Below is my html

<div class="offset-1 plus-minus" data-field="qty1">

<div class="oval" data-op="-" data-interaction="minus-qty">
    <div class="minus"></div>
</div>

<input class="js-qty" type="number" value="1" id="qty1" disabled="disabled">

<label for="qty1" class="d-none">qty 1</label>
<div class="oval oval-disabled" data-op="+" data-interaction="plus-qty">
    <div class="minus">
        <div class="plus"></div>
    </div>
</div>

In Jquery, I am trying to check where oval-disabled class is exists in "offset-1 plus-minus" .

        function validateInputElement($element){
            let disabled=false; 
            $parentDiv=$element.parent();
            $plusMinusSymbolDivs =$parentDiv.find('.oval');
            if($plusMinusSymbolDivs.length > 0)
            {
                $plusMinusSymbolDivs.each(function() {
                    console.log($(this).hasClass('.oval-disabled'));
                    if($(this).hasClass('.oval-disabled')){
                        disabled=true;
                    }else{
                        disabled=false;
                    }

                })
            }
            return disabled;

    }

I am calling this validateInputElement as

$('.js-qty').each(function() {
   if(!validateInputElement($(this))){
       $(this).val(val);
   }
})

anyInputs? Thanks, Sree.

2 Answers

You can access the class with $(this).attr('class') and then check if it includes that class or not.

JS:

function validateInputElement($element) {
  let disabled = false;
  $parentDiv = $element.parent();
  $plusMinusSymbolDivs = $parentDiv.find(".oval");
  if ($plusMinusSymbolDivs.length > 0) {
    $plusMinusSymbolDivs.each(function () {
      if ($(this).attr("class").includes("oval-disabled")) {
        disabled = true;
      } else {
        disabled = false;
      }
    });
  }
  return disabled;
}

$(".js-qty").each(function () {
  if (!validateInputElement($(this))) {
    $(this).val(val);
  }
});

Based on your HTML what I have seen, you need to use .prev() as well as you need to clean validateInputElement() code like below:

function validateInputElement($element){
  let disabled=false;
  if($element.prev('.oval').hasClass('oval-disabled')){
    disabled=true;
  }else{
    disabled=false;
  }
  return disabled;
}

Working snippet:

function validateInputElement($element){
  let disabled=false;
  if($element.prev('.oval').hasClass('oval-disabled')){
    disabled=true;
  }else{
    disabled=false;
  }
  return disabled;
}
    
$('.js-qty').each(function() {
    $(this).prop('disabled',validateInputElement($(this)));
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="offset-1 plus-minus" data-field="qty1">

<div class="oval" data-op="-" data-interaction="minus-qty">
    <div class="minus"></div>
</div>

<input class="js-qty" type="number" value="1" id="qty1" disabled="disabled">

<label for="qty1" class="d-none">qty 1</label>
<div class="oval oval-disabled" data-op="+" data-interaction="plus-qty">
    <div class="minus">
        <div class="plus"></div>
    </div>
</div>
<input class="js-qty" type="number" value="2" id="qty2" disabled="disabled">
<label for="qty2" class="d-none">qty 2</label>

Related