Подтвердить что ты не робот

Как удалить пустые поля из моей формы в строке запроса?

У меня простая форма с четырьмя входами. Когда я отправляю свою форму, я хочу использовать метод GET http.

В примере:

aaa : foo
bbb : ____
ccc : bar
ddd : ____

Я хочу, чтобы строка запроса эта:

/?aaa=foo&ccc=bar

Проблема в том, что у меня есть эта строка запроса:

/?aaa=foo&bbb=&ccc=bar&ddd=

Как удалить пустые поля из моей формы в строке запроса?

Спасибо.

4b9b3361

Ответ 1

Вы можете использовать функцию jQuery submit для проверки/изменения формы:

<form method="get" id="form1">
    <input type="text" name="aaa" id="aaa" /> 
    <input type="text" name="bbb" id="bbb" /> 
    <input type="submit" value="Go" />
</form>
<script type="text/javascript">
    $(document).ready(function() {
        $("#form1").submit(function() {
            if($("#bbb").val()=="") {
                    $("#bbb").remove();
            }
        });
     });
</script>

Ответ 2

Мне нравится идея RaphDG

Но я немного изменил код. Я просто использую отключенное свойство, а не удаляю поле. Вот измененный код:

<form method="get" id="form1">
    <input type="text" name="aaa" id="aaa" /> 
    <input type="text" name="bbb" id="bbb" /> 
    <input type="submit" value="Go" />
</form>
<script type="text/javascript">
    $(document).ready(function() {
        $("#form1").submit(function() {
            if($("#bbb").val()=="") {
                    $("#bbb").prop('disabled', true);
            }
        });
     });
</script>

Еще раз спасибо за идею RaphDG (y)

Ответ 3

Текущие решения зависят от клиента, использующего Javascript/jQuery - что не может быть гарантировано. Другой вариант - использовать правило перезаписи. На сервере Apache я использовал следующее для удаления пустых значений $ _GET из отправленных форм;

RewriteCond %{REQUEST_URI} \/formpage\/?
RewriteCond %{QUERY_STRING} ^(.*)(&|\?)[a-z-_]+=(?=&|$)(.*)$ [NC]
RewriteRule .* \/formpage?%1%2 [R,L,NE]

... что бы перевернуть это..;

http://www.yoursite.com/formpage?search=staff&year=&firstname=&surname=smith&area=

... в это;

http://www.yoursite.com/formpage?search=staff&surname=smith

Краткое объяснение:

  1. RewriteCond %{REQUEST_URI} \/formpage\/? - это способ ограничить область вашего регулярного выражения определенной подстраницей адреса вашего сайта (например, http://www.yoursite.com/formpage). Это не обязательно, но вы можете применить выражение только к странице, на которой появляется форма. Это один из способов сделать это.

  2. RewriteCond %{QUERY_STRING} ^(.*)(&|\?)[a-z-_]+=(?=&|$)(.*)$ [NC] является вторым условием, которое затем сопоставляется со строкой запроса (то есть со всем, что появляется из (или включая) знак вопроса, например, ?firstname=sam$surname=smith). Пусть разбить его;

    • ^(.*) - Символ ^ означает, что это НАЧАЛО строки запроса, а точка . говорит ЛЮБОЙ символ. Звездочка * является модификатором подстановочного знака периода, говоря, что любое количество из них должно быть включено в область.
    • (&|\?)[a-z-_]+=(?=&|$) - Это самый интересный момент (если вам нравятся такие вещи...). Это находит вашу пустую строку запроса. Между первыми скобками мы заявляем, что строка начинается с амперсанда ИЛИ с буквальным знаком вопроса (обратная косая черта делает следующий символ буквальным, в данном случае - в противном случае знак вопроса имеет другое значение). Между квадратными скобками мы говорим, что соответствуют любому символу из az, ИЛИ дефису - ИЛИ подчеркиванию _, и сразу после этого символ плюса + указывает, что мы должны соответствовать любому из этих предыдущих символов 1 или более раз. Знак равенства = как раз и выглядит (равно между именем строки запроса и ее значением). Наконец, между следующими круглыми скобками у нас есть предложение "lookahead" ?=, в котором говорится, что следующий символ ДОЛЖЕН БЫТЬ АМПЕРСАНДОМ ИЛИ в самом конце строки, как указано знаком доллара $. Предполагается, что ваша строка запроса будет считаться совпадающей, только если за ней следует начало другой строки запроса или конец строки без добавления значения.
    • Финальные биты (.*)$ [NC] просто сопоставляются с любым содержимым, которое следует за пустой строкой запроса, а предложение [NC] означает, что это CASE iNsENsiTIve.
  3. RewriteRule .* \/formpage?%1%2 [R,L,NE] - это место, где мы сообщаем mod_rewrite, что делать с нашим соответствующим контентом. По сути, переписывание URL-адреса вашего имени страницы следует за всей строкой запроса, за исключением соответствующих пустых строк. Поскольку это будет зацикливать ваш URL до тех пор, пока он не перестанет находить совпадение, не имеет значения, если у вас есть одно пустое значение или 50. Он должен определить их все и оставить только те параметры, которые были переданы со значениями. Предложение [NE] в правиле перезаписи означает, что символы не будут кодироваться по URL-адресу, что может быть или не быть полезным для вас, если вы ожидаете специальных символов (но вам, очевидно, необходимо очистить данные $ _GET когда вы обрабатываете это, что вы должны делать в любом случае).

Опять же - это, очевидно, решение Apache, использующее mod_rewrite. Если вы работаете в другой операционной системе (например, на сервере Windows), это необходимо изменить соответствующим образом.

Надеюсь, что кому-то пригодится.

Ответ 4

С помощью jQuery:

$('form[method="get"]').submit(function(){
    $(this).find(':input').each(function() {
        var inp = $(this);
        if (!inp.val()) {
            inp.remove();
        }
    });
});

Я использую это, чтобы удалить все пустые параметры из всех форм GET на моем сайте. Псевдо-селектор: включает все входы, текстовые поля, кнопки выбора и кнопки.

Ответ 5

Если вы хотите удалить все пустые входные данные, вы можете перебрать входные данные формы следующим образом:

<script type="text/javascript">
    $(document).ready(function() {
        $("#form1").submit(function() {
          $(this).find('input').each(function() {
            if($(this).val() == '') {
              $(this).remove();
            }
          });
        });
     });
</script>