Javascript.RU

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

Сообщение от stavatar@yandex.ru
Форма отправляется спокойно.
Капец какой-то - вот что вы отправляете и асинхронным запросом:

url:'controller',//url адрес файла обработчика
data:{InputX: x, InputY: y, InputR: R, Flag: false}

здесь полей формы даже и близко нет. А форма имеет тот же адрес запроса, и также отправляется методом POST. И это вы называете нормальной работой? Либо выбрасываете ajax запрос и отправляете форму, либо блокируйте отправление формы и отправляйте асинхронный запрос.

Сообщение от stavatar@yandex.ru
Проблема лишь в валидации
А она вам нужна?

input type="checkbox" onclick="changeX(-5)" и так у всех флажков, то есть выбран ли флажок или не выбран скрытое поле получит значение именно этого флажка. Это что за бардак?

InputR - это список и он не имеет опции с пустым значением, а значит он обязательно уже будет иметь значение первой опции, а они кроме чисел не имеют других значений. И что тут проверять? У вас единственно поле с ручным вводом, значение которого выгоднее проверить гораздо малой кровью, а не плагином.
Ответить с цитированием
  #12 (permalink)  
Старый 17.11.2019, 18:03
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Ну что поясните, что это значит?

Сервер получает постоянно асинхронные запросы каких то расчетов, и также под именами полей формы, и возвращает что-то. А "контрольный выстрел", это отправка самой формы методом "аля-ajax" для чего-то иного. Сервер же распознает, что пришло, по наличию заголовка асинхронного запроса. Так?
Ответить с цитированием
  #13 (permalink)  
Старый 17.11.2019, 20:13
Интересующийся
Отправить личное сообщение для stavatar@yandex.ru Посмотреть профиль Найти все сообщения от stavatar@yandex.ru
 
Регистрация: 24.07.2019
Сообщений: 21

Сообщение от laimas Посмотреть сообщение
Капец какой-то - вот что вы отправляете и асинхронным запросом:

url:'controller',//url адрес файла обработчика
data:{InputX: x, InputY: y, InputR: R, Flag: false}

здесь полей формы даже и близко нет. А форма имеет тот же адрес запроса, и также отправляется методом POST. И это вы называете нормальной работой? Либо выбрасываете ajax запрос и отправляете форму, либо блокируйте отправление формы и отправляйте асинхронный запрос.



А она вам нужна?

input type="checkbox" onclick="changeX(-5)" и так у всех флажков, то есть выбран ли флажок или не выбран скрытое поле получит значение именно этого флажка. Это что за бардак?

InputR - это список и он не имеет опции с пустым значением, а значит он обязательно уже будет иметь значение первой опции, а они кроме чисел не имеют других значений. И что тут проверять? У вас единственно поле с ручным вводом, значение которого выгоднее проверить гораздо малой кровью, а не плагином.
Проверять - было ли заполнено поле X.
Насчет флажков.Да.. я уже понял.Исправлю
Ответить с цитированием
  #14 (permalink)  
Старый 17.11.2019, 20:16
Интересующийся
Отправить личное сообщение для stavatar@yandex.ru Посмотреть профиль Найти все сообщения от stavatar@yandex.ru
 
Регистрация: 24.07.2019
Сообщений: 21

Сообщение от laimas Посмотреть сообщение
Ну что поясните, что это значит?

Сервер получает постоянно асинхронные запросы каких то расчетов, и также под именами полей формы, и возвращает что-то. А "контрольный выстрел", это отправка самой формы методом "аля-ajax" для чего-то иного. Сервер же распознает, что пришло, по наличию заголовка асинхронного запроса. Так?
Ну.Есть форма и есть график.Можно либо задать данные через форму ,либо нажать на график ,определив некоторую точку.В обоих случаях посылается запрос на сервер и выдает таблицу с результатами.
ajax запрос - нужен для 2ого.Нажатие на график изменяет переменные x,y,r и передает их через ajax запрос на сервер
Ответить с цитированием
  #15 (permalink)  
Старый 18.11.2019, 00:19
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Таблица с результатами, это html, зачем в нем data.replace('true', '') и data.replace('false','') не понятно. Это определяет способ выбора, и в обеих случаях можно было задействовать ajax (без iframe). Ну бог с ним, но ведь остальное то к чему. Валидацию можно выбросить с чистой совестью. Элементы выбора либо все списки, либо радио кнопки, либо number, либо range. Единственно, это выбор Y, если он с сотыми и то радио кнопки не пойдут, а number будет утомителен, хотя в нем можно и в ручную набирать. Все поля уже имеют значения по умолчанию.

Здесь только основное:

<html>
<head>
<meta charset="utf-8">
</head>
<body>
<div class="container" >
    <form id="myform" autocomplete="off">
        <div>
            <label>X</label>
            <input type="range" name="InputX" min="-5" max="3" value="0" /> <output>0</output>
        </div>
        <div>
            <label>Y</label>
            <input type="text" class="Y" maxlength="5" name="InputY" placeholder=" От -5 до  3" />
        </div>
        <div>
            <label>R</label>
            <input type="range" name="InputR" min="1" max="5" value="1" /> <output>1</output>
        </div>
        <div>
            <input type="radio" name="r" value="1" /> <input type="radio" name="r" value="2" checked="" /> <input type="radio" name="r" value="3" />
        </div>
        <input type="hidden" name="Flag" value="true" />
     </form>
    <div class="ItemFlex">
        <canvas id="plot" width="300" height="300">
        </canvas>
    </div>
</div>

<script>
    var frm = document.getElementById("myform"),
        plot_canvas = document.getElementById("plot"),
        plot_context = plot_canvas.getContext("2d");
    
    frm.addEventListener('change', function(e) {
        if(e.target.type=="range") e.target.nextElementSibling.value = e.target.value;
        console.log(this.r.value) //значение RadioNodeList
    });
    
    frm.InputY.addEventListener('input', function(e) {
        this.value = this.value.replace(/[^\d\.-]/,'');
    });

    plot_canvas.addEventListener("click", drawPoint, false);
    
    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();

    function drawPoint(e) {
        
        var R = frm.InputR.valueAsNumber, pos = getCursorPosition(e);
            plot_context.beginPath();
            plot_context.rect(pos.x, pos.y, 5, 5);
            pos.x -= 149;
            pos.y -= 148;
            pos.y *= -1;
            pos.x = x/100*R;
            pos.y = y/100*R;
            console.clear()
            console.dir({InputX: pos.x, InputY: pos.y, InputR: R, Flag: false})
  
    }

    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 ;
        return {x: x, y: y}
    }
</script>
</body>
</html>


Радио кнопки в форме для примера, для демонстрации, что получить значение этой группы также легко как и списка. Это со слайдером и текстовым полем, хотя, на мой взгляд, здесь удобнее тип number, в которых ручной ввод разрешить только для Y.

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

Последний раз редактировалось laimas, 18.11.2019 в 00:33.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как реализовать 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