2012-01-04 3 views
0

У меня есть форму построителя запросов, которая позволяет пользователю вводить значения в поля, которые после завершения позволяют им передавать введенные значения в поле поиска. Не все поля должны быть заполнены пользователем в форме.Как вернуть только поля, имеющие значение с помощью jQuery

образец HTML

<div id="advanceSearchCriteria"> 
    <div class="searchHeader">Person</div> 
    <div class="contentBorders" id="person"> 
     <div class="searchdiv"> 
      <span class="smLabel">Last Name</span><br /> 
      <input type="text" name="lastname" value="" size="15" /> 
     </div> 
     <div class="searchdiv"> 
      <span class="smLabel">First Name</span><br /> 
      <input type="text" name="namefirst" value="" size="15" /> 
     </div> 
     <div class="searchdiv"> 
      <span class="smLabel">Middle Name</span><br /> 
      <input type="text" name="namemiddle" value="" size="10" /> 
     </div> 
     <div class="searchdiv"> 
      <span class="smLabel">Suffix</span><br /> 
      <input type="text" name="suffix1" value="" size="5" /> 
     </div> 
</div> 
</div> 

В JQuery я создал функцию, чтобы передавать значения полей в элементе управления asp.net текстового поля

function setAdvancedSearchString() { 
    checkField(); 
    var txt = $("input[name='tbsearchterm']"); 
    var fields = $("#advanceSearchCriteria :input").serializeArray(); 
    jQuery.each(fields, function (i, field) { 
     if (txt) { 
      txt.val(txt.val() + field.name + ": " field.value + " "); 
     } 
    }); 
} 

При нынешнем подходе это возвращает все поля ввода и их значения. То, что я хотел бы иметь, это только поля, которые содержат значение, введенное пользователем для сериализации и передачи в поисковый запрос. Например, если пользователь вводил только фамилию, мне хотелось бы только это имя поля и возвращаемое значение (lastname: james)

Я попытался проверить значение null на полях var, но мой синтаксис неверен или я тестирую значение null в неправильном месте

до сих пор я попытался следующие:

var fields = if($("#advanceSearchCriteria :input") != null) 
{ 
$("#advanceSearchCriteria :input").serializeArray(); 
} 

, но это, кажется, вызывает ошибку компиляции.

Может ли кто-нибудь помочь в том, как только сериализовать и вернуть имена полей и значения, которые имеют введенное значение?

Спасибо,

ответ

0

Вы можете использовать attribute not equals selector для выбора полей с текстом, и вы не должны использовать .serializeArray(). Проверьте это (example):

function setAdvancedSearchString() { 
    checkField(); 
    var txt = $("input[name='tbsearchterm']"); 
    $("#advanceSearchCriteria :input[value!='']").each(function(i, field) { 
     txt.val(function(index, value) { 
      return [value, field.name, ": ", field.value, " "].join(''); 
     }); 
    }); 
} 

Extra
Я использовал анонимную функцию для установки значения txt и используется массив/нарисуй для конкатенации строк.

+0

Спасибо за дополнительные советы. В качестве побочного вопроса можно с уверенностью предположить, что если мне не нужно создавать объект json object array/join, это более простой подход. Это кажется более читаемым для меня по jquery serializeArray. – rlcrews

+0

Это зависит от вас. Если вы не работаете с большими наборами данных, читабельность может быть вашим приоритетом. –

1

попробовать это

function setAdvancedSearchString() { 
    checkField(); 
    var txt = $("input[name='tbsearchterm']"); 
    var fields = $("#advanceSearchCriteria :input").serializeArray(); 
    jQuery.each(fields, function (i, field) { 
     if (txt && field.value !='') { 
      txt.val(txt.val() + field.name + ": " field.value + " "); 
     } 
    }); 
} 
0

Попробуйте это:

$("#advanceSearchCriteria :input").filter(function() { 
    return $(this).val() != ""; 
}).serializeArray(); 
1

DEMO здесь

вы можете использовать :input [value != '']. Проверьте свою версию ниже,

function setAdvancedSearchString() { 
    checkField(); 
    var txt = $("input[name='tbsearchterm']"); 
    var fields = $("#advanceSearchCriteria :input[value != '']").serializeArray(); 
    jQuery.each(fields, function (i, field) { 
    if (txt) { 
     txt.val(txt.val() + field.name + ": " field.value + " "); 
     } 
    }); 
} 
+0

Спасибо за подсказку и демонстрацию, это было очень полезно. – rlcrews

Смежные вопросы