2010-12-29 29 views
31

Próbuję wyklucza wejście po nazwie (jest to ukryte wejście wstrzymując nonce)wyłączeniem pewnych nakładów na serialize

Następujące pytanie jest prawie co szukam:

How do I use jQuery's form.serialize but exclude empty fields

, ale mam 2 pytania dotyczące rozwiązania, które stwierdza, że ​​do serializowania danych formularza, z wyjątkiem pustych wejść i wejść, gdzie wartość = "."

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

przede wszystkim, nie mogę zmusić go do pracy ze zmienną jquery „tego”

$('#ofform').live('submit', function(e) { 
    e.preventDefault(); 
    var serializedReturn = $(this :input[name!='security']).serialize();   
}); 

a po drugie mam formularza oddzielna z identyfikatorem ofform-reset i gdybym używać:

var serializedReturn = $(#ofform :input[name!='security']).serialize(); 

to podnosi wejść w inny # formie ofform-reset i/lub wejścia, które nie są zawarte w znaczniku.

znalazłem odpowiedź w jednym z moich poprzednich pytań. nieważne znaczników stylu:

<form id="ofform"> 
<div id="toolbar"> 
<button id="save">Save</button> 
</form> 
<form id="ofform-reset"> 
<button id="reset">Reset</button> 
</form> 
</div> 

teraz, aby dowiedzieć się, jak korzystać z 2 różnych przycisków do kontrolowania tej samej formie

Odpowiedz

35

Nie potrzebne :, ponieważ wejście nie jest elementem selektor pseudo. Po drugie nie możesz użyć obiektu i takiego łańcucha tekstowego w selektorze. zamiast Trzeba podać to jako argument zakres do $():

$('#ofform').live('submit', function(e) { 
    e.preventDefault(); 
    var serializedReturn = $('input[name!=security]', this).serialize();   
}); 
+1

dzięki. to działa. z wyjątkiem tego, że serializacja wciąż pobiera dane z innych formularzy. to tak, jakby serializował wszystko na stronie – helgatheviking

+0

IS jeden formularz zagnieżdżony w drugim? ponieważ możesz to zrobić. Opublikuj swoje znaczniki. – prodigitalson

+0

@prodigitalson Nie możesz mieć formularza wewnątrz innego (w każdym razie jest to nielogiczne). A może miałeś literówkę w swoim komentarzu ... – Christian

8

Po pierwsze, trzeba wywołać metodę jak .find():

var serializedReturn = $(this).find('input[name!=security]').serialize(); 

W przeciwnym razie kompletny ciąg trafiłby do silnika zapytań css (Sizzle).

drugie:

mam inną postać z identyfikatorem ofform-reset i jeśli mogę użyć:

Trzeba to zmienić. Nieprawidłowy znacznik ma wiele identyfikatorów. Jeśli ja zrozumiałem źle tutaj, pierwsze rozwiązanie może również pomóc tutaj, powołując się na .find() metody aswell:

var serializedReturn = $('#ofform').find('input[name!=security]').serialize(); 
+0

Co do drugiego punktu, nie jestem pewien, że to, co miał na myśli. Zakładam, że zamierzał użyć klauzuli subjunkcyjnej: "... mam inną formę z" id "z" resetowania formularza "i jeśli używam ..." Ale mogę się mylić. –

+0

@ David: Tak, miałem ten sam pomysł, dodałem kilka linijek. I ... "on" jest prawdopodobnie "ona" :) – jAndy

+0

, a mój poprzedni komentarz mógł całkowicie użyć innego przecinka po słowie "forma", aby uzyskać prawdziwy sens ... =) Jeśli chodzi o moje splątanie płci, łał. Umm ... przykro mi z tego, @Helga (właściwie nie patrzyłem na twoje imię przed opublikowaniem [email protected] _ @) –

5

W mojej sytuacji, to działało w porządku:

$("fieldset").not(".tasks-container").serialize() 
+3

nie działa dla mnie, Rozwiązanie jAndy powyżej działa dla mnie – Florent2