어떻게 사용하 jQuery 의 형태입니다.그러나 직렬화를 제외 빈 분야
-
03-07-2019 - |
문제
나는 검색 폼의 숫자와 텍스트 입력 앤 드롭 다운스 제출을 통해 얻는다.고 싶드 검색 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과 : 입력 사이에 필요합니다. 후손 운영자.
:입력 모든 입력, TextArea, Select 및 Button 요소와 일치합니다.
value! = '' 필터와 동일하지 않은 속성입니다. 이상한 (그리고 도움이되는) 것은 그 것입니다 모두 : 입력 요소 유형에는 값 속성이 선택 및 확인란 등이 있습니다.
마지막으로 값이 ''인 경우 입력을 제거합니다. (질문에서 언급했듯이) :
$("#myForm :input[value!=''][value!='.']").serialize()
이 경우 병치, 즉 서로 옆에 두 속성 선택기를 배치합니다, an 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();
regex와 함께 할 수 있습니다 ...
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"함수를 추가 할 수 있습니다. 물론 그들에게 의미있는 것을 지명하십시오.
또는 더 좋은 방법은 사용하지 않은 VAR을 직렬화 된 FormStr에서 꺼내는 것을 쓰는 것입니다. = & 중간 문자열 또는 끝에서 = regex Wizards를 찾는 일부 정규식?
업데이트:나는 Rogeriopvl의 답변을 더 좋아합니다 (+1). 특히 지금 당장 좋은 Regex 도구를 찾을 수 없기 때문입니다.
커피 스크립트에서 다음을 수행하십시오.
serialized_form = $(_.filter($(context).find("form.params input"), (x) -> $(x).val() != '')).serialize()
당신은 수도에서 보고 싶다.각()jquery 기능 할 수있는 반복을 통해 모든 요소의 선택,그래서이 갈 수 있는 방법을 확인 각각의 입력 필드를 보면 비어 있거나지 않고 그 제거에서 양식을 사용하여 요소입니다.제거().후에는 직렬화할 수 있습니다.