Есть ли способ, чтобы изменить действие формы два выбора (два выбора) после нажатия кнопки? - PullRequest
0 голосов
/ 19 апреля 2019

Я настраиваю веб-страницу для своей системы IoT, чтобы иметь возможность создавать операторы If This Then That.Я хочу иметь возможность выбирать из двух вариантов.Затем, после нажатия кнопки, я хочу, чтобы меня перенаправили на другую страницу: / {{значение первого выбора}} / {{значение второго выбора}} /.

У меня это работает для одного выбора,есть функция js, которая вызывается при изменении первого выбора и изменяет действие формы.Я понятия не имею, как изменить код, чтобы сделать это со вторым выбором, так как я не очень хорошо знаю js.

Шаблон HTML (if_create_start.html):

<form action="" method = "POST" id = "FORM_ID">
    <p>
        <select name="list_sensors_select" required onchange="changeAction(this)">
            <option disabeled selected>Choose a Sensor</option>
                {% for key, value in list_sensors.items() %}
                    <option value="{{ key }}">{{ value["nice_name"] }}</option>
                {% endfor %}
        </select>
        <script>
            changeAction = function(select){
                document.getElementById("FORM_ID").action = select.value;
            }
        </script>
    </p>

    <p>
        <select name="until_select">
        <option selected value="none">Function Disabled</option>
        <option value="time">Amount of Time Passed</option>
        <option value="button">Button Pressed</option>
    </select>
    </p>
    <p><input type="submit" value="Submit" /></p>
</form>

webapp.py:

@app.route('/if/', methods = ['POST', 'GET'])
def if_dash():
    with open('sensors.json') as json_file:
        list_sensors = json.load(json_file)

    return render_template("if_create_start.html", list_sensors=list_sensors)

@app.route('/if/<real_name>', methods = ['POST'])
def if_sensor(real_name):
    with open('sensors.json') as json_file:
        list_sensors = json.load(json_file)

    if not real_name in list_sensors:
        abort(404)

    else:
        if request.method == 'POST':
            result = request.form
            return render_template("result.html", result=result)

json файл:

{
    "garage_door": {"nice_name": "Garage Door Sensor", "type": "float"},
    "sensor1": {"nice_name": "Sensor 1", "type": "float"},
    "sensor2": {"nice_name": "Sensor 2", "type": "time"}
}

Так какЯ сказал, что после нажатия кнопки я хочу, чтобы меня перенаправили в / if / {{list_senors_select value}} / {{till_select value}} /.Я думаю, что мне нужно изменить скрипт JS, но я не знаю, как.Я был бы благодарен за любую помощь.

Я никогда не знаю, сколько информации / сценария предоставить, поэтому, если я предоставил слишком много / слишком мало, не стесняйтесь обращаться ко мне, и я уменьшу его.

Спасибо!

1 Ответ

0 голосов
/ 19 апреля 2019

Вам нужно изменить действие, когда либо select1 ИЛИ select2 изменится:

<select id="select1" name="list_sensors_select" required onchange="changeAction()">
<select id="select2" name="until_select" onChange="changeAction()">
function changeAction() {
    // Sensor
    var select1 = document.getElementById("select1");
    var val1 = select1.options[select1.selectedIndex].value;
    // Until
    var select2 = document.getElementById("select2");
    var val2 = select2.options[select2.selectedIndex].value;
    // Change form action
    document.getElementById("FORM_ID").action = "/" + val1 + "/" + val2;
}

Редактировать: Вам также необходимо проверить, не является ли until_select нет / отключен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...