Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.11.2019, 14:18
Интересующийся
Отправить личное сообщение для stavatar@yandex.ru Посмотреть профиль Найти все сообщения от stavatar@yandex.ru
 
Регистрация: 24.07.2019
Сообщений: 21

Не работает валидация для 1 из 3 полей формы
Не работает валидация для 1 из 3 полей формы на JQuery.
Для поля Y все работает, а вот для Х - нет.
Вот весь код сайта.
Фунция валидации в самом конце

<html>

<head>
    <title>Лабораторная 2</title>
    <script type="text/javascript" src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.js"></script>


    

    <script src="jquery-validation-1.19.1/dist/jquery.validate.js"></script> <
</head>
<style>
    body
    {
        background-color: hsl(190, 76%, 87%);
        display: flex;
        flex-direction: column;
        flex-wrap: nowrap;
        justify-content: space-around;
        align-items: center;
        align-content: center;

    }
    div.container
    {

        display: flex;
        flex-direction: row;
        flex-wrap: nowrap;
        justify-content: space-around;
        align-items: center;
        align-content: center;
        height: 70%;
        border: 3px groove hsl(207, 64%, 48%) ;


    }
    ItemFlex
    {


    }
</style>

<body>
<div >
    <h1 style="color:#B88909">Проверка попадания точки в график</h1>
    <span style="margin-left: 60pt;color:#B88909"> Адамов Степан Сергеевич</span>
    <span style="color: #B88909 ">  P3210</span>
    <br> <span style="margin-left: 150pt" > Вариант - 352</span>
</div>
<div class="container" >
    <form target="graphics" method="POST" action="controller" class="ItemFlex Form "  id="myform" style="border-right:  3px groove  hsl(207, 83%, 75%);margin-left: 100pt;"   >
        X
        <Br><Br>
        <input type="checkbox"    onclick="changeX(-5)" value="-5">-5
        <input type="checkbox"   onclick="changeX(-4)"  value="-4">-4
        <input type="checkbox"   onclick="changeX(-3)" value="-3">-3
        <input type="checkbox"   onclick="changeX(-2)" value="-2">-2
        <input type="checkbox"   onclick="changeX(-1)"  value="-1">-1
        <input type="checkbox"   onclick="changeX(0)" value="0">0
        <input type="checkbox"   onclick="changeX(1)" value="1">1
        <input type="checkbox"   onclick="changeX(2)" value="2">2
        <input type="checkbox"  onclick="changeX(3)" value="3">3
        <input type="hidden" id="InputX" name="InputX" data-location="bottom" value="" />
        <input type="hidden"  name="Flag" data-location="bottom" value="true" />
        <Br>
        <label name="LabelX" ></label>
        <Br>
        <Br>
        Y
        <Br>
        <input type="text" id="InputY" class="Y" oninput="changeInputY()"  maxlength="5" size="15" name="InputY" placeholder=" От -5 до  3">

        <Br>
        <label name="LabelY" ></label>
        <Br>
        <Br>
        R
        <Br>
        <select id="RR" name="InputR">
            <option id="R1" value="1" >1</option>
            <option  id="R2" value="2" >2</option>
            <option id="R3" value="3" >3</option>
            <option id="R4" value="4" >4</option>
            <option id="R5" value="5" >5</option>
        </select>
        <Br>
        <Br>
        <input type="submit"   class="formWithValidation" >
    </form>
    <div class="ItemFlex">
        <canvas id="plot" width="300" height="300">
        </canvas>
    </div>
    <iframe id="if" name = "graphics" height="300"></iframe>
</div>

</body>

<script>

    function  changeInputY()
    {
        var texts;
        document.getElementById("InputY").value=document.getElementById("InputY").value.replace(',','.');
    }
    function changeR()
    {
        var selind = document.getElementById("RR").options.selectedIndex;
        R= document.getElementById("RR").options[selind].value;
    }
    function changeX(value)
    {

        document.getElementById("InputX").value= value;

    }
    var plot_canvas = document.getElementById("plot");
    var plot_context = plot_canvas.getContext("2d");


    plot_context.beginPath();
    plot_context.arc(150, 150, 100, 0, Math.PI/2);
    plot_context.lineTo(150, 150);
    plot_context.closePath();
    plot_context.rect(50, 100, 100, 50);
    plot_context.fillStyle = 'red';
    plot_context.fill();
    plot_context.beginPath();
    plot_context.moveTo(100, 150);
    plot_context.lineTo(150, 250);
    plot_context.lineTo(150, 150);

    plot_context.fillStyle = 'red';
    plot_context.stroke();
    plot_context.closePath();
    plot_context.fillStyle = 'red';
    plot_context.fill();
    plot_context.beginPath();
    //Ox
    plot_context.moveTo(30, 150);
    plot_context.lineTo(270, 150);
    plot_context.lineTo(260, 140);
    plot_context.moveTo(270, 150);
    plot_context.lineTo(260, 160);
    //Oy
    plot_context.moveTo(150, 30);
    plot_context.lineTo(140, 40);
    plot_context.moveTo(150, 30);
    plot_context.lineTo(160, 40);
    plot_context.moveTo(150, 30);
    plot_context.lineTo(150, 270);

    plot_context.moveTo(30, 150);
    plot_context.closePath();
    plot_context.stroke();

    <jsp:useBean id="Bean" class="general.BeanComponent" scope="session"/>
    xxx=<%=Bean.getCount()%>

    var x;
    var y;
    var R = '1';
    document.getElementById('RR').addEventListener("click", changeR, false);
    plot_canvas.addEventListener("click", drawPoint, false);
   
    
    function drawPoint(e)
    {

        alert(xxx);

        //  alert(xxx);
        $('#results1').hide();
        if(R == '-1') {
            alert("Выберите какое-нибудь значение R");
        } else {
            var cell = getCursorPosition(e);
            plot_context.beginPath();
            plot_context.rect(x, y, 5, 5);
            x -= 149;
            y -= 148;
            y *= -1;
            x = x/100*R;
            y = y/100*R;
            $.ajax(
                {
                    type:'post',//тип запроса: get,post либо head
                    url:'controller',//url адрес файла обработчика
                    data:{'InputX': x, 'InputY': y, 'InputR': R,"Flag": false},//параметры запроса
                    response:'text',//тип возвращаемого ответа text либо xml
                    error: function (message)
                    {
                        console.log(message);
                        $('#results1').text(message);
                        alert("Error " + message+  $('#results1').text(message));
                    },
                    success:function (data)
                    {//возвращаый результат от сервера
                        console.log(data);
                        data=String(data);
                        plot_context.fillStyle = 'orange';
                        plot_context.fill();

                        data.replace('true', '');
                        data.replace('false','');
                        var ifr = document.getElementById('if').contentDocument;
                        ifr.open();
                        ifr.writeln(data);
                        ifr.close();
                        //$('#results1').text(numy);
                        /*alert("Correct " + message);
                        $$('result',$$('result').innerHTML+'<br />'+data);*/
                    }
                });

        }
    }
    function getCursorPosition(e) {
        if (e.pageX != undefined && e.pageY != undefined) {
            x = e.pageX;
            y = e.pageY;
        }
        else {
            x = e.clientX + document.body.scrollLeft +
                document.documentElement.scrollLeft;
            y = e.clientY + document.body.scrollTop +
                document.documentElement.scrollTop;
        }
        x -= plot_canvas.offsetLeft ;
        y -= plot_canvas.offsetTop ;
    }

   
    $(document).ready(function ()
    {

        jQuery.validator.addMethod("numb", function()
        {
            console.log(Number ( document.getElementById("InputY").value) );
            if ( Number.isNaN(Number ( document.getElementById("InputY").value) )) return false ;
            else return  true;
        },"");
        var form=$('#myform');
        form.validate(
            {
            rules:
                {
                    InputX: {
                        required: true,
                       

                    },
                    InputY: {
                        numb:true,
                        required: true ,
                        max: 3 ,
                        min: -5,
                    },
                    InputR:
                        {
                            required: true
                        }},
            messages:
                {
                    InputX: {
                        required: "Заполните X",
                        
                    },
                    InputY:
                        {
                            required: "Заполните Y",
                            numb: " Вы ввели не число",
                            max: "Число должно быть меньше 3" ,
                            min: "Число должно быть больше -5",
                        },
                    InputR: {
                        required: "Заполните R",
                    },
                },

            errorPlacement: function(error, element)
            {

                if (element.attr("name") == "InputX") error.insertAfter($("label[name=LabelX]"));
                if (element.attr("name") == "InputY") {

                    error.insertAfter($("label[name=LabelY]"));
                }
                if (element.attr("name") == "InputR") error.insertAfter($("input[name=InputR]"));

            }

        });
    });

</script>

</html>

Последний раз редактировалось stavatar@yandex.ru, 17.11.2019 в 14:48.
Ответить с цитированием
  #2 (permalink)  
Старый 17.11.2019, 14:40
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Зачем jQuery подключается дважды - строки 5 и 8?

jquery-validation-1.19.1\dist\jquery.validate.js jquery-validation-1.19.1/dist/jquery.validate.js
Ответить с цитированием
  #3 (permalink)  
Старый 17.11.2019, 14:47
Интересующийся
Отправить личное сообщение для stavatar@yandex.ru Посмотреть профиль Найти все сообщения от stavatar@yandex.ru
 
Регистрация: 24.07.2019
Сообщений: 21

Ой,случайно , видимо.Но проблемы это не исправило
Ответить с цитированием
  #4 (permalink)  
Старый 17.11.2019, 16:27
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Не странно ли иметь скрытое поле, значение которого непонятно чем заполняется? У вас куча флажков, значения которых можно присвоить скрытому полю. Может быть не батарея флажков, а связанная группа радио кнопок и скрытое поле выбросить?

response:'text',//тип возвращаемого ответа text либо xml - нет такого параметра у ajax в jQuery, есть dataType.

Кстати, зачем оно вообще это поле и проверять если его значение, а под его именем отправляется результат расчета как свойство объекта: 'InputX': x? Зачем вообще вам форма, которую вы не отправляете, а значит и поверка ее полей?

Последний раз редактировалось laimas, 17.11.2019 в 16:46.
Ответить с цитированием
  #5 (permalink)  
Старый 17.11.2019, 16:44
Интересующийся
Отправить личное сообщение для stavatar@yandex.ru Посмотреть профиль Найти все сообщения от stavatar@yandex.ru
 
Регистрация: 24.07.2019
Сообщений: 21

Не странно ли иметь скрытое поле, значение которого непонятно чем заполняется? У вас куча флажков, значения которых можно присвоить скрытому полю. Может быть не батарея флажков, а связанная группа радио кнопок и скрытое поле выбросить?
----------------------------------------------------
Это лабораторная.Именно так и должно быть как я сделал.

response:'text',//тип возвращаемого ответа text либо xml - нет такого параметра у ajax в jQuery, есть dataType
---------------------------------------------------
все нормально тут работало и так.Исправление этого изначальную проблему не исправило
Ответить с цитированием
  #6 (permalink)  
Старый 17.11.2019, 16:49
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от stavatar@yandex.ru
Это лабораторная.
Это чушь, а не лаборатория - флажки для выбора множества, а вы из флажков присваиваете одно значение этому полю. А выбор одного из множества, это зависимые кнопки.

И на кой черт вам вообще нужна валидация, если форму вы не отправляете вообще.
Ответить с цитированием
  #7 (permalink)  
Старый 17.11.2019, 16:50
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от stavatar@yandex.ru
все нормально тут работало и так.
Не надо пороть отсебятины, работать оно не будет, просто данный параметр будет игнорироваться.
Ответить с цитированием
  #8 (permalink)  
Старый 17.11.2019, 16:58
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

И не надо тип number заключать в кавычки:

не var R = '1';, а var R = 1;, не R == '-1', а R == -1

а значения полей приводите к числу, иначе при мат. операциях может возникать баг. Или вам нужны именно строки?

Последний раз редактировалось laimas, 17.11.2019 в 17:00.
Ответить с цитированием
  #9 (permalink)  
Старый 17.11.2019, 17:27
Интересующийся
Отправить личное сообщение для stavatar@yandex.ru Посмотреть профиль Найти все сообщения от stavatar@yandex.ru
 
Регистрация: 24.07.2019
Сообщений: 21

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

Последний раз редактировалось stavatar@yandex.ru, 17.11.2019 в 17:29.
Ответить с цитированием
  #10 (permalink)  
Старый 17.11.2019, 17:27
Интересующийся
Отправить личное сообщение для stavatar@yandex.ru Посмотреть профиль Найти все сообщения от stavatar@yandex.ru
 
Регистрация: 24.07.2019
Сообщений: 21

Сообщение от laimas Посмотреть сообщение
Это чушь, а не лаборатория - флажки для выбора множества, а вы из флажков присваиваете одно значение этому полю. А выбор одного из множества, это зависимые кнопки.

И на кой черт вам вообще нужна валидация, если форму вы не отправляете вообще.
Форма отправляется при нажатии на кнопку.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как реализовать ctrl+z для простых полей ввода prog77 jQuery 3 27.07.2017 16:04
Формирование формы и валидация koha345 Dojo toolkit 2 23.05.2016 19:11
jquery для placeholder работает только для первого input в ie Nailya jQuery 1 13.05.2014 09:57
поиск классов внутри тега yozuul jQuery 24 14.06.2013 22:00
проверка полей формы!!!! DENAT Общие вопросы Javascript 0 05.06.2008 22:14