كيف يمكنني استخدام مسج نموذج.تسلسل ولكن استبعاد حقول فارغة

StackOverflow https://stackoverflow.com/questions/608730

سؤال

لدي نموذج بحث مع عدد من مدخلات النص وإسقاط هبوطا التي تقدم من خلال الحصول على.أود أن نظافة url البحث عن طريق إزالة حقول فارغة من querystring عندما تم إجراء البحث.

var form = $("form");  
var serializedFormStr = form.serialize();  
// I'd like to remove inputs where value is '' or '.' here
window.location.href = '/search?' + serializedFormStr

أي فكرة كيف يمكن أن تفعل هذا باستخدام jQuery ؟

هل كانت مفيدة؟

المحلول

لقد كنت أبحث على مسج مستندات و أعتقد أننا يمكن أن نفعل هذا في سطر واحد باستخدام محددات:

$("#myForm :input[value!='']").serialize() // does the job!

من الواضح #myForm يحصل العنصر مع id "myForm" ولكن ما كان أقل وضوحا بالنسبة لي في البداية أن مساحة شخصية هو مطلوب بين #myForm و :الإدخال كما هو سليل المشغل.

:المدخلات مباريات جميع المدخلات, textarea, اختر زر العناصر.

[value!="] هو سمة لا تساوي التصفية.غريب (ومفيدة) هو أن جميع :المدخلات العنصر أنواع سمات القيمة حتى يختار وخانات.... الخ

وأخيرا أيضا إزالة المدخلات حيث كانت القيمة '.' (كما ورد في السؤال):

$("#myForm :input[value!=''][value!='.']").serialize()

في هذه الحالة تجاور ، أي وضع اثنين السمة محددات بجانب بعضها البعض, يعني آن. باستخدام فاصلة يعني أو.آسف إذا كان هذا واضحا CSS الناس!

نصائح أخرى

وأنني لم أكن قادرا على الحصول على حل توم في العمل (؟)، لكني لم اكن قادرة على القيام بذلك .filter() استخدام مع وظيفة قصيرة لتحديد الحقول الفارغة. أنا باستخدام مسج 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;
        });

قد يكون مفيدا لشخص

أود أن ننظر في مصدر رمز مسج.في أحدث نسخة خط 3287.

وأود أن أضيف في "serialize2" و "serializeArray2" وظائف.طبعا اسم لهم شيئا meaniful.

أو طريقة أفضل أن أكتب شيئا لسحب المستخدمة فأر من serializedFormStr.بعض التعابير المنطقية التي يبحث =& في منتصف سلسلة أو تنتهي في = أي regex المعالجات حولها ؟

تحديث: أنا أحب rogeriopvl الجواب أفضل (+1)...وخاصة منذ كنت لا يمكن العثور على أي جيد regex الأدوات الآن.

في coffeescript، قيام بذلك:

serialized_form = $(_.filter($(context).find("form.params input"), (x) -> $(x).val() != '')).serialize()

وقد ترغب في النظر في وظيفة مسج. كل ()، الذي يسمح لك لتكرار خلال كل عنصر من عناصر محدد، لذلك بهذه الطريقة يمكنك الذهاب التحقق من كل حقل الإدخال ومعرفة إذا كان فارغا أم لا ومن ثم إزالته من النموذج باستخدام element.remove (). بعد ذلك يمكنك تسلسل النموذج.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top