2016-09-28 2 views
0

Ich habe eine Seite mit ein paar Formen (Nummer ist anders, wie sie dynamisch geladen werden). Ich bin in der Lage, durch jedes Formular auf der Seite zu navigieren und seine Daten zu serverseitig zu serialisieren. Ich frage mich, ob es möglich ist, nur Daten in das Array zu serialisieren/hinzuzufügen, nur wenn ein Kontrollkästchen in einer bestimmten Form aktiviert ist (und das gibt ihm einen Wert, den ich verwenden muss)? Hier ist mein Code:Serialize Formulardaten einer bestimmten Form aus vielen, wenn ein bestimmtes Feld Wert hat jQuery

Javascript

$('body').on('click', '.saveStates', function() { 
    $('.states_list').each(function (key, value) { 
      forms.push($(this).serialize()); 
    }); 

HTML

<form class="states_list"> 
    <input type="checkbox" class="selected_state" name="active_state" value="<?php echo $state['id']; ?>" 
    <input type="text" class="col-md-10" name="pdf_price" id="pdf_price" value="<?php echo $state['pdf_price']; ?>"> 
    </form> 
<button type="button" class="saveStates btn btn-success">Save</button> 

ich mit Klasse, wenn das Kontrollkästchen überprüfen müssen selected-state einen Wert hat (angekreuzt), und dann Fügen Sie dieses Formular dem Array forms hinzu. Ich dachte an etwas wie das zu tun:

$('.states_list').each(function (key, value) { 
    if($('.selected_state').val()){ 
     forms.push($(this).serialize()); 
} 
}); 

Aber das funktioniert nicht. Jede Hilfe ist willkommen.

+0

try $ ('selected_state') ist (": checked") statt –

Antwort

1

Sie es .has() mit Filter könnten:

$('body').on('click', '.saveStates', function() { 
    $('.states_list').has('.selected_state:checked').each(function(key, value) { 
    forms.push($(this).serialize()); 
    }); 
}); 

Aber Sie Code könnte nur sein, :.

$('body').on('click', '.saveStates', function() { 
    var forms = $('.states_list').has('.selected_state:checked').serializeArray(); 
    console.log(forms) 
}); 
+0

entnommen. Danke, das macht den Trick. Die erste Option ist für meinen Anwendungsfall besser, da ich ein Array jedes einzelnen Formulars anstelle einer Zeichenfolge aus allen Feldern erhalte. –

+0

@MihailIvanchev Ich habe gerade den zweiten aktualisiert, mit 'serializeArray()', der ein Array von Objekten zurückgibt. –

+0

Danke, aber nur ein paar Arrays ist besser, weil ich sie im Backend mit 'parse_str()' in a analysieren kann 'foreach' Zyklus. –

0

Ich bin mir nicht sicher, ob ich das Problem bekomme.

Wenn Sie nur prüfen, ob das Kontrollkästchen, um geprüft wurde, können Sie das Formular senden könnten if ($(this).is(":checked")) forms.push($(this).serialize());

+0

'this' zum' form' Element r bezieht sich egarding OP Code –

+0

Mein schlechtes ($ (dieses) .is (": überprüft")). Dies bezieht sich hier auf das aktuelle Kontrollkästchen, während das zweite DIES ist direkt aus dem OP-Code –

Verwandte Themen