Как исправить ошибку & ldquo; Невозможно прочитать свойство 'call' из undefined. Возникла исключительная ситуация при проверке элемента, проверьте метод 'rules' & rdquo ;?

Вам нужно выполнить два бинарных поиска, чтобы найти самый низкий индекс перед диапазономLow и наивысшим индексом после rangeHigh, таким образом вы можете подсчитать дубликаты в пределах диапазона.

Это даст временную сложность o ( 2 log n), поскольку мы дважды выполняем двоичный поиск.

private int searchArrayForNumbersInRange(int[] arr, int start, int end) {
    int leftIndex = searchLeft(arr, start);
    int rightIndex = searchRight(arr, end);
    int count;

    if (leftIndex < 0 || rightIndex < 0)
        return -1;
    if (rightIndex == leftIndex)
        count = 1;
    else {
        count = rightIndex - leftIndex;
    }
    return count;
}

private int searchLeft(int[] arr, int start) {
    int lo = 0;
    int hi = arr.length - 1;

    while (lo <= hi) {
        int mid = lo + (hi - lo) / 2;

        if (arr[mid] == start && arr[mid -1] < start) {
            return mid - 1;
        }

        if (arr[mid] >= start)
            hi = mid - 1;
        else
            lo = mid + 1;
    }

    return -1;
}

private int searchRight(int[] arr, int end) {
    int lo = 0;
    int hi = arr.length -1;

    while (lo <= hi) {
        int mid = lo + (hi - lo) / 2;

        if (arr[mid] == end && arr[mid+1] > end)
            return mid;

        if (mid <= end)
            lo = mid + 1;
        else
            hi = mid - 1;
    }

    return -1;
}
-1
задан Alexandr Järvi 17 January 2019 в 08:51
поделиться

2 ответа

Согласно документации https://jqueryvalidation.org/rules/ функция add в

$('.validating').rules('add', {
    number: true,
    messages: {
        number: "Введите цифры"
    },
});

добавит правила для элемента AN, в вашем случае только к первому может быть. Следовательно, они используют идентификатор в документации ...

первая версия вашего кода должна это сделать:

$('form').validate({
     rules: {
        price_from: {
            number: true
        },
        price_to: {
            number: true
        }
    },
    messages: {
        price_from: {
            number: "Введите цифры"
        },
        price_to: {
            number: "Введите цифры"
        }
    },

    errorElement: "div",

    errorPlacement: function(error, element) {
        $('.error-messages').append(error);
    },

    submitHandler: function() {
        this.successList.map(function(field){
              console.log($(field).attr("name"), $(field).val())
          })
        console.log("Таблица успешно обновлена!")
    }
});
.wrapper {
    width: 50%;
    margin: 0 auto;
}

.price-filter {
    text-align: center;
    margin-bottom: 10px;
    height: auto;
}
    form {
        width: 100%;
    }

    .price-filter input {
        border: 1px solid #000000;
        outline: none;
    }
    
.error-messages {
     color: red;
     margin-top: 5px;
}

input.error {
    border: 2px solid red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.0/jquery.validate.js"></script>

<div class="price-filter wrapper">
            <form action="/" name="form">
                <label>Цена от:</label>
                <input class="price-from validating" name="price_from" type="text" placeholder="0">
                <label>до:</label>
                <input class="price-to validating" name="price_to" type="text" placeholder="10000">
                <input class="refresh" type="submit" value="Обновить">
                <div class="error-messages"></div>
            </form>
        </div>

0
ответ дан Kossi D. T. S. 17 January 2019 в 08:51
поделиться

Я решил свою проблему следующим образом:

$('form').validate({
             errorElement: "div",

             errorPlacement: function(error, element) {
                 $('.error-messages').append(error);
             },

             submitHandler: function() {
                console.log("Таблица успешно обновлена!")
            }
        });

        $('.validating').each(function() {
            $(this).rules('add', {
                number: true,
                messages: {
                    number: "Введите цифры"
                },
            });
        });

Вот пример: https://jsfiddle.net/waLgfv6m/

0
ответ дан Alexandr Järvi 17 January 2019 в 08:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: