2010-03-03 13 views
11

Ciao a tutti sto girando gli oggetti "on (aggiungendo la classe .active) e off" su una pagina html con oggetti html, non moduli. E ad ogni clic voglio che crei una serie di elementi con la classe .active ma non riesco a ottenere alcun risultato ?!serializza senza un modulo?

è nella giusta direzione?

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' 
}) 

mantiene allarme e finestra vuota, ma quando uso questo su un modulo che afferra tutti gli oggetti con la classe .active

qualsiasi puntatori benvenuti!

risposta

5

ok - ha ottenuto questo lavoro ma i suoi poveri come pulito come 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' 
    }) 

} 

che ci sia un metodo migliore?

+0

Mi piace. data.push è una buona soluzione per costruire l'oggetto, ed essere in grado di unirlo con altri dati che potresti avere per l'invio. –

+0

@daniel Si prega di controllare la mia risposta e prendere in considerazione l'accettazione. – pepkin88

9

questo è quello che sto usando

(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); 

di usarlo nel tuo caso $ ('li.tagToggle.active') serializeAny().;

+3

Questa non è una buona risposta. Non stai controllando se un elemento ha un nome se si tratta di un pulsante o se è una casella di controllo o una radio selezionata. '.serializeArray' controlla anche se un elemento è disabilitato. Inoltre puoi usare '$ .param' per parametrizzare la tua matrice. – pepkin88

+3

Si potrebbe aggiungere facilmente la condizione IF per soddisfare qualsiasi esigenza. anche se l'elemento è disabilitato, devi comunque inviarlo al server. Infine, se la sua casella di controllo o radio, il .val() dovrebbe ancora gestirlo, – fedmich

+0

, ma invia anche il valore quando è deselezionato, quindi funziona male. L'OP era interessato a un effetto di '.serialize' su altri elementi rispetto alle forme, quindi più è simile a' .serialize', meglio è. La tua funzione non fa quasi nessun filtro e verifica in confronto a ciò che jQuery fa con il suo '.serializeArray' e tu aggiungi boilerplate, che potrebbe e dovrebbe essere gestito da' $ .param'. Sembra solo un po 'complicato, cosa potrebbe ingannare i principianti a pensarci come qualcosa di sicuro.Beh, non è sicuro. Ecco perché ho downvoted la tua risposta. – pepkin88

5

Con questa funzione è possibile effettuare qualsiasi insieme di elementi serializable:

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

quindi è possibile utilizzare in questo modo:

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

o

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

È possibile serializzare tutti gli input all'interno di un elemento come questo:

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

Colon è nel posto sbagliato. Dovrebbe essere var data = $ ('YourId: input'). Serialize() –

1

nel caso qualcuno inciampare su questa domanda, questo collegamento è stessa domanda e la soluzione sta utilizzando jQuery serializzare

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

quindi in questo caso

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

link alla discussione jQuery to serialize only elements within a div