2010-03-03 13 views
11

Hallo, ich alle Objekte "auf (Hinzufügen der Klasse. Active) und aus" auf einer HTML-Seite mit HTML-Objekten, nicht Formulare. Und bei jedem Klick möchte ich, dass es ein Array der Items mit der Klasse .active erstellt, aber ich kann anscheinend keine Ergebnisse erzielen ?!serialisieren ohne ein Formular?

ist das in die richtige Richtung?

var data = $('li.tagToggle.active').serializeArray(); 
// li id format is 'id_0001' 
alert(data) 
$.post("/scripts/php/process.php",{ 
     'data[]': data, 
     funcName : 'tagResults', 
     tagResults : '1' 
}) 

hält Alarmierung und leeres Fenster, aber wenn ich dies auf einem Formular verwenden packt alle Objekte mit der Klasse .active

alle Hinweise willkommen!

Antwort

5

ok - habe dies funktioniert aber seine Nichtse so ordentlich wie serialize()

function getTags(){ 

    var data = []; 

    $('li.tagToggle.active').each(function(){ 
     var me = $(this); 
     var id = me.attr("id").split('_'); 
     data.push(id[1]) 

    }); 

    $.post("/scripts/php/process.php",{ 
     'data': data, 
     funcName : 'tagResults', 
     tagResults : '1' 
    }) 

} 

denke, es gibt eine bessere Methode?

+0

Ich mag es. data.push ist eine nette Lösung, um das Objekt zu erstellen und es mit anderen Daten zu verschmelzen, die Sie zum Übergeben haben könnten. –

+0

@daniel Bitte überprüfen Sie meine Antwort und akzeptieren Sie sie. – pepkin88

9

Das ist, was ich

(function($){ 
$.fn.serializeAny = function() { 
    var ret = []; 
    $.each($(this).find(':input'), function() { 
     ret.push(encodeURIComponent(this.name) + "=" + encodeURIComponent($(this).val())); 
    }); 

    return ret.join("&").replace(/%20/g, "+"); 
} 
})(jQuery); 

mit ihm $ in Ihrem Fall zu verwenden ('li.tagToggle.active') serializeAny().

+3

Dies ist keine gute Antwort. Sie überprüfen nicht, ob ein Element den Namen hat, ob es eine Schaltfläche ist oder ob es ein angekreuztes Kontrollkästchen oder ein Radio ist. '.serializeArray' überprüft auch, ob ein Element deaktiviert ist. Sie könnten auch '$ .param' zum Parametrisieren Ihres Arrays verwenden. – pepkin88

+3

Man könnte leicht IF-Bedingung hinzufügen, um zu genügen, was immer er braucht. Selbst wenn das Element deaktiviert ist, sollten Sie es dennoch an den Server senden. Schließlich, wenn seine Checkbox oder Radio, die. Val() sollte noch damit umgehen – fedmich

+0

Aber sendet auch Wert, wenn es deaktiviert ist, so dass es falsch funktioniert. OP war an einem Effekt von '.serialize' auf andere Elemente als Formulare interessiert. Je ähnlicher also' .serialize', desto besser. Ihre Funktion führt fast keine Filter und Prüfungen im Vergleich zu dem, was jQuery mit ihrem '.serializeArray' macht, und Sie fügen einen Textbaustein hinzu, der von' $ .param' behandelt werden könnte und sollte. Es sieht nur etwas kompliziert aus, was Anfänger dazu bringen könnte, darüber als etwas Sicheres zu denken.Nun, es ist nicht sicher. Deshalb habe ich deine Antwort abgelehnt. – pepkin88

5

Mit dieser Funktion können Sie serializable eine beliebige Menge von Elementen machen:

function makeSerializable(elem) { 
    return $(elem).prop('elements', $('*', elem).andSelf().get()); 
} 

Dann können Sie es wie folgt verwenden:

var arr = makeSerializable('li.tagToggle.active').serializeArray(); 

oder

var $elem = $('li.tagToggle.active'); 
var data = makeSerializable($elem).serialize(); 
6

Sie können serialisiert alle Eingänge innerhalb eines Elements wie dieses:

var data = $('YourId :input').serialize() 
+2

Colon ist am falschen Ort. Sollte sein var data = $ ('YourId: input'). Serialize() –

1

falls jemand auf diese Frage stolpern, ist dieser Link gleiche Frage, und die Lösung wird mit Jquery serialize

$('#divId :input').serialize(); 

so in diesem Fall

$('li.tagToggle.active :input').serialize(); 

Link jQuery to serialize only elements within a div

in Frage zu stellen
Verwandte Themen