jQueryのシリアル化フォームフィールドを使用してフィールドの値をトリミングする方法はありますか?
-
03-07-2019 - |
質問
jQueryを使用してajax投稿を送信するフォームがあり、送信されたフォームをシリアル化します。コードは次のようになります。
var form = $("form");
var action = form.attr("action");
var serializedForm = form.serialize();
$.post(action, serializedForm, function(data)
{
...
});
ここでの問題は、フィールドの末尾に空白がある場合、serialize関数はそれらの空白を削除するときにプラス(+)記号に変換することです。
以下を実行せずにフィールドをトリミングする方法があります:
$("#name").val( jQuery.trim( $("#name") ) );
解決
オブジェクトをループしてすべてをトリミングしてみてください。
//Serialize form as array
var serializedForm = form.serializeArray();
//trim values
for(var i =0, len = serializedForm.length;i<len;i++){
serializedForm[i] = $.trim(serializedForm[i]);
}
//turn it into a string if you wish
serializedForm = $.param(serializedForm);
他のヒント
<!> lt; input <!> gt; および <!> lt; textarea <!> gt; <!> lt; / textarea <!> gt; DOMの要素値:
$('input, textarea').each(function(){
$(this).val(jQuery.trim($(this).val()));
});
すべての入力をループし、送信する前にトリムできます。
$("input, textarea").each(function(){
$(this).val(jQuery.trim($(this).val()));
});
少し遅れましたが、これはおそらくあなたが望んでいたものです:
var form = $("form");
var action = form.attr("action");
var formArr = form. serializeArray();
jQuery.each(formArr , function(i, field) {
formArr[i].value = $.trim(field.value);
});
var serializedForm = $.param(formArr);
$.post(action, serializedForm, function(data)
{
...
});
これらのソリューションは、実際にはページ上のフォームフィールドを変更するため、機能しません。ユーザーの入力内容を変更せずに、フィールドの値を変更したいだけです。
できることの1つは、非表示の値を持つ個別のフォームを作成し、ユーザーが送信するときに実際の、トリミングされたフォームの値を非表示の値に保存し、<!> quot; hidden <!> quotをシリアル化することです;それを形にして投稿してください。ただのアイデア。
ASP.NETを使用しており、ページごとに1つのフォームのみを使用できる場合、次のように特定のDIVの値のみを送信できます。
var dataString = "source=contactDiv";
dataString += getDataString(divId, "input"); // add inputs
dataString += getDataString(divId, "select"); //add select elements
次のように更新を投稿します:
$.post("UpdateContact.aspx",
dataString,
afterUpdate,
"json");
ヘルパー関数
function afterUpdate(data){
//add some post-update info
}
function getDataString(divId, tagName) {
var data = "";
var elements = $("#" + divId + " " + tagName);
for (var i = 0; i < elements.length; i++) {
var el = elements[i];
var name = el.name;
var value = $(el).val();
if (value != null && value != "undefined")
value = $.trim(value + ""); //added "" to fix IE 6 bug for empty select
if (el.type == "checkbox")
value = el.checked;
else if (el.type == "radio" && !el.checked)
value = "";
if (!(value == "" || value == "undefined" || name == "" || name == "undefined"))
data += "&" + name + "=" + escape(value);
}
return data;
}
所属していません StackOverflow