Jquery - анализ нескольких значений одного параметра из URL в HTML - PullRequest
0 голосов
/ 10 февраля 2019

Я хочу проанализировать значения параметров из URL, сгенерированного моей контактной формой (метод GET и вынужден использовать JQuery вместо чистого JS).Он работает внутри консоли, значения читаются правильно.У меня есть две проблемы, которые возникают из-за неопытности в Jquery и JS.

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

  2. У меня есть флажки внутри формы, и это вызывает проблемы с чтением значений из URL,Если я отмечу два из четырех полей, только один из них будет прочитан и напечатан в консоли.Мне нужно прочитать всю информацию, которую предоставил пользователь.Я думаю, мне нужны массивы, но как их использовать в этом случае?

Пример сгенерированного URL.

localhost: 63342 / 2018-11-13-html / form_sent.html? Phone = 4325325235 & adress = testadress & order = book1 & order = book2 & deliverydate = datadostawy & deliverymethod = chinamail & accept = on

Мой текущий код для чтения и регистрации параметров URL:

<section>
    <script>
        $.urlParam = function (name) {
            var results = new RegExp('[\?&]' + name + '=([^&#]*)')
                .exec(window.location.href);
            if (results == null) {
                return 0;
            }
            return results[1] || 0;
        };

        console.log($.urlParam('phone'));
        console.log($.urlParam('adress'));
        console.log($.urlParam('order'));
        console.log($.urlParam('deliverydate'));
        console.log($.urlParam('deliverymethod'));
    </script>
</section>
1021 * И моя форма:
<section>
    <header><h2>Contact</h2></header>
    <form style="width:500px" action="form_sent.html" method="get">
        <fieldset>
            <legend>Contact form:</legend>
            <fieldset>
                <legend>Contact info:</legend>
                <span class="label" style="width: 50px">Phone: </span>
                <input name="phone" type="tel" required="true"/><br/>
                <span class="label" style="width: 50px">Adress: </span>
                <input name="adress" type="text" required="true"/><br/>
            </fieldset>
            <fieldset>
                <legend>Order:</legend>
                <span class="label" style="width: 100px">Books:</span>
                <br>
                <input type="checkbox" name="order" value="book1"/>Book1<br/>
                <input type="checkbox" name="order" value="book2"/>Book2<br/>
                <input type="checkbox" name="order" value="book3"/>Book3<br/>
                <input type="checkbox" name="order" value="book4"/>Book4<br/>
            </fieldset>
            <fieldset>
                <legend>Delivery date:</legend>
                <span class="label" style="width: 50px">Date: </span>
                <input type="text" name="deliverydate" required="true"/><br/>
            </fieldset>
            <fieldset>
                <legend>Delivery method:</legend>
                <input type="radio" name="deliverymethod" value="fedx" />FEDx
                <input type="radio" name="deliverymethod" value="chinamail"/>China Mail
                <input type="radio" name="deliverymethod" value="personal" checked="true"/>In person<br/>
            </fieldset>
            <input name="agree" type="checkbox" required="true"/> I agree to contact terms<br/>
            <input type="reset" value="Reset form"/><input type="submit" value="Send form"/>
        </fieldset>
    </form>
</section>

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

В первой части вашего вопроса вы не упомянули то, что пытались, но если вы используете jQuery, то .html() и .text()методы - это обычный подход, и они очень просты.

Используйте некоторые классы CSS и идентификаторы в своем HTML, чтобы вы могли точно выбирать элементы, на которые вы хотите ориентироваться.Например, допустим, что ваша form_sent.html страница содержит что-то вроде этого:

<table>
    <tr>
        <td>Phone</td>
        <td>Address</td>
        ....
    </tr>
    <tr>
        <td class='phone'></td>
        <td class='address'></td>
        ....
</table>

Теперь в jQuery вы можете настроить таргетинг на эти ячейки и добавить содержимое следующим образом:

$('.phone').text($.urlParam('phone'));

Что касаетсяВторая часть вашего вопроса, это немного сложнее.Прежде всего вам нужно добавить флаг g в ваше регулярное выражение, чтобы убедиться, что вы соответствуете всем вхождениям, а не только первому:

RegExp('[\?&]' + name + '=([^&#]*)', 'g')

Далее, сваш текущий подход с использованием .exec(), вам придется многократно повторять, чтобы соответствовать нескольким вхождениям. Документы MDN имеют пример именно этого .

Вот обновленная версия вашего кода с использованием их подхода:

$.urlParam = function (name) {
    var reg = new RegExp('[\?&]' + name + '=([^&#]*)', 'g'),
        matches = [];

    while ((results = reg.exec(window.location.href)) !== null) {
        matches.push(results[1])
    }

    return matches;
};

// Now:
// console.dir($.urlParam('phone'));
// console.dir($.urlParam('order'));
//
// Array(1)
//   0: "4325325235"
//   
// Array(2)
//   0: "book1"
//   1: "book2"
//   

$.urlParam теперь возвращает массив, возможно нулевого размера, вместо строки, как ранее, так что выВам нужно будет назвать его по-другому, но это ваша следующая задача :-) Если этот подход не подходит, возможно, другой вариант - запустить его (или вариант) один раз, при загрузке страницы, ища любой Параметры URL, а не один конкретный именованный параметр.Эти результаты могут быть сохранены в переменной, которую вы сможете использовать позже.

Кроме того, примечание: я заметил, что один из ваших параметров имеет опечатку - adress вместо address, что, вероятно, вызовет у вас путаницуи головная боль в какой-то момент в будущем: -)

Примечание: используйте CSS!Получить эти встроенные стили оттуда.

form {
    width: 500px;
}

.label {
    width: 50px;
}

.label-wide {
    width: 100px;
}
0 голосов
/ 10 февраля 2019

Чтобы установить значения в форме HTML, вы можете создать таблицу с одной строкой и 5 столбцами.Для каждого столбца вы можете определить идентификатор.Затем вы можете установить значение с помощью следующего синтаксиса:

$("#table #firstColumn").text($.urlParam('phone'));// This is just for one, you can repeat the step for others.

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

Надеюсь, это поможет вам.

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