2014-10-20 35 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'(你忘了,包括了jQuery的lib在你搗鼓) – Brewal 2014-10-20 12:44:14

+0

*「這樣的作品,但沒有t就像它應該那樣「*這是什麼意思? – epascarello 2014-10-20 12:57:33

+0

@Brewal我已經添加了jQuery庫。謝謝你提醒我 :) – GibboK 2016-04-29 11:47:13

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()); 
} 

這意味着,爲了ACHIEVER你是什麼之後就可以使用相同的方法和執行由serializeArray返回所得陣列的附加濾波:

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

change_url('?' + params);