Nano Hash - криптовалюты, майнинг, программирование

Выпадающее HTML-значение onChange для использования в SQL-запросе

У меня есть веб-форма (я думаю, совместимая с HTML5!), которая использует классический ASP с VBScript с несколькими свободными текстовыми полями, средством выбора даты и несколькими раскрывающимися списками, где параметры извлекаются из различных запросов SQL. (Это урезанная базовая версия формы, используемой для тестирования этой проблемы.)

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

Я могу захватить выбранный параметр с помощью javascript onChange и отобразить его на странице (что и делает текущий скрипт get_boiler, но я не могу понять, как использовать его в запросе, который используется для отображения необходимых параметров.

Раскрывающийся список, в котором значение извлекается функцией OnChange, называется «Установленная модель котла», а раскрывающийся список, который будет использовать это значение как часть SQL-запроса, — «Установленная модель котла».

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

Может кто-то указать мне верное направление? Запрос, который должен использовать выбранное значение, — это набор записей под названием «модели». Я положил ???? как временное значение в запросе SQL.

Надеюсь, я объяснил это правильно и использовал правильные теги в посте. Я не ищу кого-то, кто сделает работу за меня, просто направьте меня в правильном направлении. Я хорошо просмотрел Stackoverflow в поисках проблемы, похожей на эту, но не нашел ничего, что пыталось бы сделать то же самое.

<!--#include virtual="/includes/functions.asp"-->

<!DOCTYPE html>

<%
Call OpenDB()
Call OpenRecordSet(heatcontrols, "select callmd3_field_no, callmd3_listitem from dbo.Call_More_Def3 where callmd3_link_to_def1 = 'LOG' and callmd3_field_no = '170' and callmd3_listorder not in ('1') order by callmd3_listorder")
Call OpenRecordSet(maincontrols, "select callmd3_field_no, callmd3_listitem from dbo.Call_More_Def3 where callmd3_link_to_def1 = 'LOG' and callmd3_field_no = '168' and callmd3_listorder not in ('1') order by callmd3_listorder")
Call OpenRecordSet(installtype, "select callmd3_field_no, callmd3_listitem from dbo.Call_More_Def3 where callmd3_link_to_def1 = 'LOG' and callmd3_field_no = '171' and callmd3_listorder not in ('1') order by callmd3_listorder")
Call OpenRecordSet(makes, "select make from lu_make where make not in ('-') order by make")
Call OpenRecordSet(models, "select model from lu_model where link_to_make = '????' order by model")
%>

<html>

<head>
    <title>TEST</title>
    <meta charset="UTF-8">  
    <link rel="stylesheet" href="/includes/css/installer.css"/>
    <link rel="stylesheet" href="/includes/datepicker/jquery.ui.all.css"/>
    <script type="text/javascript" src="/includes/scripts/jquery.min.js"></script>
    <script type="text/javascript" src="/includes/scripts/jquery-1.7.1.js"></script>
    <script type="text/javascript" src="/includes/scripts/jquery.ui.core.js"></script>
    <script type="text/javascript" src="/includes/scripts/jquery.ui.datepicker.js"></script>

    <script>
        $(function() {
        $( "#surveydate" ).datepicker({
                dateFormat: 'dd MM yy'
            });
        });
    </script>

    <script type="text/javascript"> 
        function get_boiler(){
            document.getElementById("boilervalue").innerHTML = document.getElementById("boilermake").value;
        return true;
        }
    </script>   

    <script type="text/javascript" src="/includes/scripts/update-validate.js"></script>
    <script type="text/javascript" src="/includes/scripts/update-showhide.js"></script>
</head>

<body>

<div class="popup-content">

    <form method="POST" name="updatejob" action="/includes/update.asp" onsubmit="return validateForm()">
        <h1>TEST FORM</h1>
        <br/>
        <b>Surveyor</b>
        <br/>
        <input type="text" name="surveyor" id="surveyor" maxlength="50" class="addjobmenudropmedium">
        <br/><br/>
        <b>Survey Date</b>
        <br/>
        <input type="text" name="surveydate" id="surveydate" class="addjobmenudropmedium">
        <br/><br/>
        <b>Heating Controls (with boiler install)</b>
        <br/>
        <select name="continst" id="continst" class="addjobmenudropsmall">
            <option value="">Select.....</option>
            <% WHILE (NOT heatcontrols.EOF) %>
                <option value="<%=heatcontrols.Fields("callmd3_listitem").value %>"><%=heatcontrols.Fields("callmd3_listitem").value %></option>
            <% heatcontrols.movenext()
            Wend %>
        </select>
        <br/><br/>
        <b>Main Heating Controls</b>
        <br/>
            <select name="heatcon" id="heatcon" class="addjobmenudrop">
                <option value="">Select.....</option>
                <% WHILE (NOT maincontrols.EOF) %>
                    <option value="<%=maincontrols.Fields("callmd3_listitem").value %>"><%=maincontrols.Fields("callmd3_listitem").value %></option>
                <% maincontrols.movenext()
                Wend %>
            </select>
        <br/><br/>      
        <b>Install Type</b>
        <br/>
            <select name="installtype" id="installtype" class="addjobmenudrop">
                <option value="">Select.....</option>
                <% WHILE (NOT installtype.EOF) %>
                    <option value="<%=installtype.Fields("callmd3_listitem").value %>"><%=installtype.Fields("callmd3_listitem").value %></option>
                <% installtype.movenext()
                Wend %>
            </select>
        <br/><br/>
        <b>Installed Boiler Make</b>
        <br/>
        <select name="boilermake" id="boilermake" class="addjobmenudrop" onChange="get_boiler()">
            <option value="">Select.....</option>
            <% WHILE (NOT makes.EOF) %>
                <option value="<%=makes.Fields("make").value %>"><%=makes.Fields("make").value %></option>
            <% makes.movenext()
            Wend %>
        </select>
        <br/><br/>
        <b>Installed Boiler Model</b>
        <br/>
        <select name="boilermodel" id="boilermodel" class="addjobmenudrop">
            <option value="">Select.....</option>
            <% WHILE (NOT models.EOF) %>
                <option value="<%=models.Fields("model").value %>"><%=models.Fields("model").value %></option>
            <% models.movenext()
            Wend %>
        </select>       
        <br/><br/>
        <b>Installed Boiler Serial Number</b>
        <br/>
        <input type="text" name="boilerserial" id="boilerserial" maxlength="50" class="addjobmenudropmedium">
        <br/><br/>
        <b>Notes</b>
        <br/>
        <textarea name="notes" id="notes" rows="5" cols="62" maxlength="1000" class="addjobtextbox"></textarea>
        <br/><br/><br/>
        <input type="submit" value="UPDATE JOB" name="Submit" class="formbutton">
        <br/><br/><br/>
    </form>

</div>

<%
Call CloseRecordSet(heatcontrols)
Call CloseRecordSet(maincontrols)
Call CloseRecordSet(installtype)
Call CloseRecordSet(makes)
Call CloseRecordSet(models)
Call CloseDB()
%>

</body>
</html>

Вот живая версия формы - http://www.chenks.co.uk/form.asp


  • Вы либо используете запрос, чтобы получить все модели в какую-то переменную, либо применяете фильтр на стороне клиента. Или вам нужно вызвать какую-то другую страницу/скрипт, который выполняет запрос на основе выбранного параметра и возвращает соответствующие модели через Ajax. 27.10.2017
  • Мне нужно выбрать make в SQL-запросе моделей, который затем заполняет раскрывающийся список моделей. Кроме того, раскрывающийся список моделей обновляется каждый раз, когда изменяется параметр раскрывающегося списка make (без обновления всей страницы формы). я ничего не знаю об ajax, так что это потребовало бы некоторых новых знаний от моего имени, если бы это был путь вперед. 27.10.2017

Ответы:


1

Я еще не программировал с ASP, но думаю, это работает так же, как и с PHP:

Создайте новую страницу с именем что-то вроде «ModelsDropdown.asp» с содержимым, которое вам нужно для раскрывающегося списка:

<!--#include virtual="/includes/functions.asp"-->

<%
Call OpenDB()
Call OpenRecordSet(models, "select model from lu_model where link_to_make = url_parameter_make order by model")
%>

    <option value="">Select.....</option>
    <% WHILE (NOT models.EOF) %>
        <option value="<%=models.Fields("model").value %>"><%=models.Fields("model").value %></option>
    <% models.movenext()
    Wend %>

<%
Call CloseRecordSet(models)
Call CloseDB()
%>

Как вы используете параметры URL в ASP, я не знаю, но надеюсь, что знаете. При открытии http://www.chenks.co.uk/ModelsDropdown.asp?make=some_make он должен выдать только параметры выбора для переданного make.

Теперь вы можете получить этот контент и поместить его в исходную форму с помощью JavaScript/Ajax:

$("#boilermake").on("change", function(){
    // Use jQuery get to call your new page with the selected make as parameter
    $.get("/ModelsDropdown.asp", {make: $("#boilermake")[0].value}, function(data){
        // paste the select options into the DOM
        $("#boilermodel").html(data);
    });
});
27.10.2017
  • это интересное решение, и похоже, что оно может сработать, мне нужно поиграть и протестировать. но да по сути разница между классическим asp и php минимальна и теории одинаковые. Параметры URL в значительной степени идентичны между ними. 27.10.2017
  • Это была всего лишь быстрая версия, обычно я бы предпочел не отправлять весь HTML-код через Ajax, а только данные, а затем генерировать HTML на стороне клиента данных с помощью Javascript. Тем не менее, я должен идти сейчас, может быть, я могу объяснить позже сегодня. 27.10.2017
  • только что проверил, и да, это работает (как только я помню, мне пришлось поместить скрипт внизу html, а не вверху). я обновил живую страницу, чтобы показать, что она работает. 27.10.2017
  • полностью протестировано и работает очень хорошо, спасибо @Danmoreng, один дополнительный вопрос, можно ли использовать то же решение для заполнения текстового поля, а не раскрывающегося списка? (в этой ситуации, когда будет только 1 результат) 01.11.2017
  • Точно так же вы можете делать практически все что угодно. Хотя я обычно использую ajax для передачи только данных (например, как JSON) вместо всего HTML и создаю HTML на стороне клиента. 02.11.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..