Gli operatori javascript non corrispondono al decimalx di input

Oct 22 2020

Non capisco perché quando uso il valore della condizione come a > bma non funziona correttamente, forse a causa del valore a = decimale. seguendo il mio codice:

HTML

<input type="text" class="form-control" name="numberdays"  id="numberdays" value="10.0/>
<input type="text" name="cutii" id="cutii" value="9.0">
<button class="btn btn-primary waves-effect" id="subcut" type="submit" disabled>

SCRIPT

cutifrom.addEventListener('input',()=>{
            if (cutii.value > numberdays.value) {
            subcut.removeAttribute('disabled');
        }else{
            subcut.setAttribute('disabled','disabled');
        }
        }) ;  

il risultato è che il mio pulsante è disabilitato, non dovrebbe esserlo.

ecco il mio js. in realtà numero di giorni uso il datepicker e genera numeri che vengono generati automaticamente. forse perché è la condizione che utilizzo l'operatore non viene rilevato. JS per datepicker

 <script type="text/javascript">
      $(document).ready(function(){ let $fromDate = $('#fromdate'), $toDate = $('#todate'); $fromDate.datepicker().on('change', function(){
        $toDate.datepicker('option', 'minDate', $(this).val());
    });

    $toDate.datepicker().on('change', function(){ $fromDate.datepicker('option', 'maxDate', $(this).val()); });; }); $(function() {
    let $fromDate = $('#fromdate'),
        $toDate = $('#todate'),
        $numberDays = $('#numberdays'),
        $numberCuti = $('#cuti');

    $fromDate.datepicker().on('change', function(){ $toDate.datepicker('option', 'minDate', $(this).val()); $numberDays.val(calculateDateDiff($toDate.val(), $(this).val()));
    });

    $toDate.datepicker().on('change', function(){ $fromDate.datepicker('option', 'maxDate', $(this).val()); $numberDays.val(calculateDateDiff($(this).val(), $fromDate.val()));
    });

   cutifrom.addEventListener('input',()=>{
        if (parseFloat(cuti.value) >= parseFloat(numberdays.value)) {
        subcut.removeAttribute('disabled');
    }else{
        subcut.setAttribute('disabled','disabled');
    }
    }) ;     
        
function calculateDateDiff(endDate, startDate) {
        if (endDate && startDate) {
            let e = moment(endDate),
                s = moment(startDate);

            return e.diff(s, "days");
        }

        return null;
    }   
});
</script>

Risposte

3 semicolon Oct 23 2020 at 03:09

Il tuo valore è di tipo String e il confronto non è come Number, prova a convertire il valore in un numero e vedi se funziona.

È necessario modificare il codice in questo modulo:

  cutifrom.addEventListener('input',()=>{
        if (Number(cutii.value) > Number(numberdays.value)) {
        subcut.removeAttribute('disabled');
    }else{
        subcut.setAttribute('disabled','disabled');
    }
    }) ; 

In bocca al lupo :)