Невозможно ОТКЛЮЧИТЬ кнопку, когда количество равно нулю в Vue JS

#javascript #vue.js #shopify

#javascript #vue.js #Shopify

Вопрос:

Я пытаюсь использовать vue для увеличения и уменьшения входных значений в компоненте выбора количества, единственная проблема заключается в том, что когда значение равно нулю или ниже, я хочу отключить кнопку минус, ниже приведены HTML и JS, которые я создал до сих пор, оповещение и функция updateButtonDisabled () не работают.

HTML с функциями щелчка

 <div class="input-group-prepend">
  <span id="subButton" class="input-group-text" @click="decrement()">-</span>
</div>

<input v-model="form.quantity" type="number" class="form-control" id="Quantity" value="1" min="1" {% if product.variants.size == 1 %}max="{{ product.variants.first.inventory_quantity}}"{% endif %}>

<div class="input-group-append">
  <span class="input-group-text" @click="increment()"> </span>
</div> 
 

JS и данные

     data(){
      return {
        form: {
          id: document.getElementById('variant-id').value,
          quantity: document.getElementById('Quantity').value
        }
      }
    }

      updateButtonDisabled(){
        // If quanitity less than equal zero disable the minus button
        if(this.form.quantity <= 0) {
          document.getElementById("subButton").setAttribute('disabled', 'disabled');
        }
        else {
          document.getElementById("subButton").removeAttribute('disabled');
        }
      },
      increment () {
        this.form.quantity  
        this.updateButtonDisabled();

      },
      decrement () {
        if(this.form.quantity <= 0) {
          alert('Negative quantity not allowed')
        } else {
          this.form.quantity--
        }
         this.updateButtonDisabled();
      }
 

Любая помощь была бы отличной — спасибо

Ответ №1:

A <span> не реагирует на наличие disabled атрибута.

У вас есть два варианта: используйте элемент DOM, который изначально (или в любой используемой вами среде) изменяет внешний вид при disabled наличии атрибута. Например <button> .

Или вы могли бы просто применить класс (как насчет disabled ?) К элементу и оформить его по своему усмотрению:

  span.disabled { 
   opacity: 0.5;
   pointer-events: none;
 }
 

Еще одно замечание: не манипулируйте DOM в своем компоненте подобным образом. Vue может сделать это за вас, так же просто, как:

 <button :disabled="form.quantity <= 0">
 

Или, используя класс:

 <span :class="{ disabled: form.quantity <= 0}">
 

Я бы не назвал это неправильным, но это напоминает мне парня, который толкает спортивную машину по дороге вместо того, чтобы водить ее.

Последнее замечание: больше не нужно звонить updateButtonDisabled() . В этом прелесть использования Vue. Это реактивно.