GET을 통해 제출하는 여러 텍스트 입력 및 드롭 다운이있는 검색 양식이 있습니다. 검색이 수행 될 때 쿼리 문자열에서 빈 필드를 제거하여 더 깨끗한 검색 URL을 갖고 싶습니다.
var form = $("form");
var serializedFormStr = form.serialize();
// I'd like to remove inputs where value is '' or '.' here
window.location.href = '/search?' + serializedFormStr
jQuery를 사용하여 어떻게 할 수 있는지 아십니까?
답변
jQuery 문서를 살펴 보았고 선택기를 사용하여 한 줄로 할 수 있다고 생각합니다 .
$("#myForm :input[value!='']").serialize() // does the job!
분명히 #myForm은 ID가 “myForm”인 요소를 가져 오지만 처음 에는 하위 연산자 이므로 #myForm과 : input 사이에 공백 문자 가 필요하다는 것이 처음에는 명확 하지 않았습니다 .
: input 은 모든 입력, 텍스트 영역, 선택 및 단추 요소와 일치합니다.
[value! = ”] 는 필터가 같지 않은 속성입니다. 이상하고 유용한 점은 모든 : input 요소 유형에는 선택 및 확인란 등의 값 속성이 있다는 것입니다.
마지막으로 값이 ‘.’인 입력도 제거합니다. (질문에서 언급했듯이) :
$("#myForm :input[value!=''][value!='.']").serialize()
이 경우 병치, 즉 서로 옆에 두 개의 속성 선택기를 배치 하는 것은 AND를 의미합니다. 쉼표 사용 은 OR을 의미합니다. 그것이 CSS 사람들에게 명백하다면 죄송합니다!
답변
Tom의 솔루션을 작동시킬 수 없었지만 (?) .filter()
짧은 함수를 사용하여 빈 필드를 식별 할 수있었습니다 . jQuery 2.1.1을 사용하고 있습니다.
var formData = $("#formid :input")
.filter(function(index, element) {
return $(element).val() != '';
})
.serialize();
답변
이것은 나를 위해 작동합니다.
data = $( "#my_form input").filter(function () {
return !!this.value;
}).serialize();
답변
정규식으로 할 수 있습니다 …
var orig = $('#myForm').serialize();
var withoutEmpties = orig.replace(/[^&]+=\.?(?:&|$)/g, '')
테스트 사례 :
orig = "a=&b=.&c=&d=.&e=";
new => ""
orig = "a=&b=bbb&c=.&d=ddd&e=";
new => "b=bbb&d=ddd&" // dunno if that trailing & is a problem or not
답변
위의 솔루션을 사용했지만 저에게는 효과가 없었습니다. 그래서 다음 코드를 사용했습니다.
$('#searchform').submit(function(){
var serializedData = $(this).serializeArray();
var query_str = '';
$.each(serializedData, function(i,data){
if($.trim(data['value'])){
query_str += (query_str == '') ? '?' + data['name'] + '=' + data['value'] : '&' + data['name'] + '=' + data['value'];
}
});
console.log(query_str);
return false;
});
누군가에게 유용 할 수 있습니다.
답변
jQuery의 소스 코드를 살펴 보겠습니다. 최신 버전 라인 3287.
“serialize2″및 “serializeArray2″함수를 추가 할 수 있습니다. 물론 의미있는 이름을 지정하십시오.
또는 더 좋은 방법은 serializedFormStr에서 사용되지 않는 변수를 가져 오는 무언가를 작성하는 것입니다. 중간 문자열에서 = &를 찾거나 = 정규식 마법사로 끝나는 일부 정규식?
업데이트 :
나는 rogeriopvl의 대답을 더 좋아합니다 (+1) … 특히 지금 좋은 정규식 도구를 찾을 수 없기 때문에.
답변
Rich의 솔루션에 대한 대안 :
$('#form').submit(function (e) {
e.preventDefault();
var query = $(this).serializeArray().filter(function (i) {
return i.value;
});
window.location.href = $(this).attr('action') + (query ? '?' + $.param(query) : '');
});
설명 :
.submit()
양식의submit
이벤트에 연결e.preventDefault()
양식 제출을 방지합니다..serializeArray()
전송 될 쿼리 문자열의 배열 표현을 제공합니다..filter()
해당 배열에서 거짓 (빈 포함) 값을 제거합니다.$.param(query)
업데이트 된 배열의 직렬화 된 URL 호환 표현을 생성합니다.window.location.href
요청 을 보낼 값 설정