2017-09-20 44 views
1

我使用了serialize() jQuery函數,它將捕獲所選表單的所有值,如下面的代碼所示。使用jQuery序列化後刪除值。

$('#serialize').click(function(){ 
 
    var ser = $('#form1').serialize(); 
 
    alert(ser); 
 
    })
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
    <form id="form1"> 
 
    <input type="text" name="text1"> 
 
    <input type="text" name="text2"> 
 
    </form> 
 
    <button id="serialize">Serialize</button> 
 

結果

text1=&text2= 

有沒有辦法刪除text1剛過它序列?

我希望

text2= 

回答

1

,而不是事後刪除它的結果,嘗試序列化之前對其進行過濾,例如:

$("#form1").find("input[name!=text1]").serialize(); 

這個例子會發現找到所有的form1中的輸入不具有text1的名稱,那麼它將序列化它。

+0

如果我有2個過濾器怎麼辦?那可能嗎 ? – Gagantous

+0

我是否必須.find()。find()? – Gagantous

+0

如果你想過濾2,你只需保持鏈接find()函數。像這樣$(「#form1」)。find(「input [name!= text1]」)。find(「input [name!= text2]」)。serialize(); –

1

的一種方法,它可以讓你有被忽略的表單元素名稱的數據結構,將是這樣的:

// Object with the names of the form elements to ignore 
var filters = { 
    "text1": true, 
    "textN": true 
}; 
$("#form1") 
    .find(":input") 
    .filter(function (i, item) { 
     return !filters[item.name]; 
    }) 
    .serialize(); 
1

您可以從連載通過使元素中刪除,以disabled

$('#serialize').click(function(){ 
 
    removeParam("#form1 [name=text1]"); 
 
    var ser = $('#form1').serialize(); 
 
    console.log(ser); 
 
}); 
 

 
function removeParam(p) { 
 
    $(p).attr("disabled",true); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
    <form id="form1"> 
 
    <input type="text" name="text1"> 
 
    <input type="text" name="text2"> 
 
    </form> 
 
    <button id="serialize">Serialize</button>