2014-10-20 5 views
3

У меня есть форма с несколькими текстовыми вводами.Удалить пустые значения перед формой отправить jquery

Когда пользователь нажимает представить в этой форме - значения поля ввода текста сериализовано и становятся параметрами запроса GET, как этот

?param1+=26482&param2= 

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

Как это сделать?

Моя представить функцию

$("body").on('click','#form_submit_button', function(e){ 
    var form = $('#filter_form'); 
    change_url('?'+form.serialize()); 
}); 

function change_url(link) 
{ 
    var IE = IE || 0; 

    if (IE == 0) { 
     var stateObj = { foo: "bar" }; 
     history.pushState(stateObj, "page 2", link); 
    } else { 
     location.href = link; 
    } 
} 

ответ

4

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

http://jsfiddle.net/63ux5ap9/

$(document).ready(function() { 
     $('#filter_form').submit(function() { 
      var text = $(this).find(":input").filter(function() { 
       return $.trim(this.value).length > 0 
      }).serialize(); 
      console.log('text: ', text); 
      return false; 
     }); 
    }); 
+0

+1 для отправить событие вместо щелчка и использования ': input' (вы забыли включить LIB JQuery в вас скрипку) – Brewal

+0

*", который работает, но нет как это должно быть ». Что в мире это значит? – epascarello

+0

@Brewal Я добавил jQuery lib. Спасибо за напоминание :) – GibboK

0

Что вам нужно:

var i = str.lastIndexOf("&"); 

Так

if(str.length <= str.lastIndexOf("=")) { 
    var i = str.lastIndexOf("&"); 
    str = str.substring(0, i); 
} 

Кстати, я хотел бы снять проблему с поразрядной!

1

JQuery $.fn.serialize представляет собой сочетание $.param и $.fn.serializeArray методов:

jQuery.fn.serialize = function() { 
    return jQuery.param(this.serializeArray()); 
} 

Это означает, что для того, чтобы Успешность, что вы после вы можете использовать тот же подход и дополнительной фильтрации полученного массива, возвращаемого serializeArray :

var form = $('#filter_form'), 
    params = $.param(form.serializeArray().filter(function(el) { 
     return $.trim(el.value); 
    })); 

change_url('?' + params); 
Смежные вопросы