Проверить требуемый jquery не работает, когда я пытаюсь изменить правила

У меня 2 поля. Пытаюсь вставить число в первую. Второе значение должно быть меньше или равно первому полю.

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

Я пытался следовать документации, но не понимаю, что не так.

<div class="form-group">
     <label class="control-label" for="inputDefault-4">Quantidade permitida por pedido<span class="text-danger">*</span></label>
            @Html.TextBoxFor(t => t.Produto.QuantidadeVenda, new { maxlength = "10", @class = "form-control", @id = "quantidade_pedido", placeholder = "0", validate = "required",@name = "quantidade_pedido" , @type = "number" })
</div>

<div class="form-group">
      <label class="control-label" for="inputDefault-4">Possui regime de comodato<span class="text-danger">*</span></label>
      <div>
          @Html.CheckBoxFor(t => t.Produto.FlagComodato, new { @class = "chk-inativar switcher-example-default", @id = "comodato", @onclick = "checkComodato(this)" })
      </div>
</div>
<div id="limitEmprestimo" style="display: none" class="form-group">
      <label class="control-label" for="quantidade_comodato">Quantidade limite de empréstimo <span class="text-danger">*</span></label>
      @Html.TextBoxFor(t => t.Produto.QuantidadeComodato, new { maxlength = "10", @class = "form-control", @id = "quantidade_comodato", placeholder = "0", validate = "required", @name = "quantidade_comodato", @type = "number"})
function checkComodato(check) {
    if (check.checked) {
        $("#limitEmprestimo").show();
    }
    else {
        $("#limitEmprestimo").hide();
    }
}

 $("#quantidade_comodato").focusout(function () {
    var quantc = $("#quantidade_comodato").val() === "" ? 0 : parseInt($("#quantidade_comodato").val());

    var quantp = $("#quantidade_pedido").val() === "" ? 0 : parseInt($("#quantidade_pedido").val());

    if (quantc > quantp) {

        var validator = $("#frmCadastro").validate();
        $("#quantidade_comodato").rules("remove", "required");
        $("#quantidade_comodato").rules("add", {
            max: quantp,
            messages: {
                quantp: "Invalid !"
            }
        });
        validator.element($(this));
    }
});
1
0
31
1

Ответы 1

Проблема, скорее всего, в том, что сценарий jquery не находится в теге <script>. Поэтому браузер не поймет, что ваш код должен запускаться как javascript, вместо этого браузер просто думает, что ваш код представляет собой простой текст.

Попробуй это:

<div class="form-group">
    <label class="control-label" for="inputDefault-4">Quantidade permitida por pedido<span class="text-danger">*</span></label>
    @Html.TextBoxFor(t => t.Produto.QuantidadeVenda, new { maxlength = "10", @class = "form-control", @id = "quantidade_pedido", placeholder = "0", validate = "required",@name = "quantidade_pedido" , @type = "number" })
</div>
<div class="form-group">
    <label class="control-label" for="inputDefault-4">Possui regime de comodato<span class="text-danger">*</span></label>
    <div>
        @Html.CheckBoxFor(t => t.Produto.FlagComodato, new { @class = "chk-inativar switcher-example-default", @id = "comodato", @onclick = "checkComodato(this)" })
    </div>
</div>
<div id="limitEmprestimo" style="display: none" class="form-group">
    <label class="control-label" for="quantidade_comodato">Quantidade limite de empréstimo <span class="text-danger">*</span></label>
    @Html.TextBoxFor(t => t.Produto.QuantidadeComodato, new { maxlength = "10", @class = "form-control", @id = "quantidade_comodato", placeholder = "0", validate = "required", @name = "quantidade_comodato", @type = "number"})
</div>

<script>

    function checkComodato(check) {
        if (check.checked) {
            $("#limitEmprestimo").show();
        }
        else {
            $("#limitEmprestimo").hide();
        }
    }

    $("#quantidade_comodato").focusout(function () {
        var quantc = $("#quantidade_comodato").val() === "" ? 0 : parseInt($("#quantidade_comodato").val());

        var quantp = $("#quantidade_pedido").val() === "" ? 0 : parseInt($("#quantidade_pedido").val());

        if (quantc > quantp) {

            var validator = $("#frmCadastro").validate();
            $("#quantidade_comodato").rules("remove", "required");
            $("#quantidade_comodato").rules("add", {
                max: quantp,
                messages: {
                    quantp: "Invalid !"
                }
            });
            validator.element($(this));
        }
    });

</script>

Если проблема не в этом, то другой типичной проблемой является то, что скрипт jquery загружается в конец _layout.cshtml. Поэтому, когда вы вызываете jquery, он еще не определен. В этом случае вы должны получить ошибку сценария в консоли разработчика (нажмите F12 в вашем браузере, чтобы отобразить ее).

Это легко исправить, поместив сценарий в раздел Razor.

@section Scripts
{
    <script>
        // your code here
    </script>
}

«Скрипты» объявлены в _Layout.cshtml как @RenderSection("Scripts", required: false).

извините, я забыл отправить в конце тег «</ script>», но он все равно не работает. Когда я отвлекаюсь, чтобы проверить валидацию, сообщение и цвета неправильные.

Pedro Freitas 13.09.2018 20:45

Добавьте скриншот к вопросу

jgauffin 14.09.2018 06:57

Другие вопросы по теме