2008-10-20 2 views
4

저는 jQuery를 사용하여 아약스 게시물을 제출하는 양식을 가지고 있으며, 양식을 직렬화하여 전송합니다. 코드는 다음과 같습니다 : 여기jQuery의 serialize 양식 필드를 사용하고 필드의 값을 잘라내는 방법이 있습니까?

var form = $("form"); 
var action = form.attr("action"); 
var serializedForm = form.serialize(); 
$.post(action, serializedForm, function(data) 
{ 
    ... 
}); 

문제는 필드 후행 공백 경우 그들이 제거되어야 할 때 직렬화 기능이 플러스 (+) 기호로 그 공간을 설정하는 것입니다.

필드는 다음을 수행없이 트림 얻을 수있는 방법이 있나요 :

$("#name").val(jQuery.trim($("#name"))); 

답변

10

개체를 반복하면서 모든 것을 다듬을 수 있습니다. 당신이 할 수

//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); 
+0

아직 테스트하지는 않았지만 이것이 내가 찾고 있었던 것입니다. 감사. – Jared

+0

이것도 효과가 있습니까? Docs (http://api.jquery.com/serialize/)는 객체가 아니라 문자열 만 반환한다고 제안합니다. – Danny

+0

좋은 캐치 Danny. fn.serializeArray()를 사용하기 위해 위의 응답을 변경했습니다. –

6

트림 모든 < 입력 >< 텍스트 영역 > <는 DOM에서 > 요소 값/텍스트 영역 :

$('input, textarea').each(function(){ 
    $(this).val(jQuery.trim($(this).val())); 
}); 
+1

'$'대부분의 장소가 왜'$ .trim' 대신'jQuery.trim'입니까? – ComputerDruid

0

제출하기 전에 모든 입력을 반복하여 처리 할 수 ​​있습니다.

$("input, textarea").each(function(){ 
    $(this).val(jQuery.trim($(this).val())); 
}); 
0

실제로 페이지의 양식 필드가 변경되므로 이러한 솔루션이 작동하지 않습니다. 사용자가 입력 한 것을 변경하지 않고 필드의 값을 수정하기 만하면됩니다.

+0

일련 번호를 지정하기 전에 트리밍 코드를 호출합니다. 사용자가 입력 한 것을 트리밍되고 트림되지 않은 인스턴스로 유지하면 어떤 이점이 있습니까? 어쩌면 제가 잘 모르는 합리적인 유스 케이스가있을 수 있습니다. – micahwittman

0

한 가지 숨겨진 값을 별도의 양식을 가지고 있고, 사용자가 전송할 때 실제, 손질, 숨겨진 값의 형태로 값이, 당신이 "숨겨진"형식과 포스트를 직렬화 할 수 저장할 수있다 그. 그냥 생각. 당신은 페이지 당 하나의 양식을 가질 수 ASP.NET을 사용하는 경우 다음과 같이

0

, 당신은 주어진 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; 
} 
1

조금 늦게, 그러나 이것은 아마 당신이 원하지했다 :

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) 
{ 
    ... 
}); 
관련 문제