Tengo un formulario generado por PHP:
<form id="change_status_form" name="change_status_form"> <input name="booking_int" type="hidden" value="'.$upcoming_bookings[$x]['booking_int'].'"> <select name="booking_status" onchange="change_status();"> <option selected value="0"> Not Yet Arrived </option> <option value="1"> Seated </option> <option value="4"> Cancelled </option> <option value="5"> No Show </option> </select>esto enviará los datos sobre el cambio a ajax:
function change_status() { $.post('dash_includes/dash_change_booking_status.php', { booking_status: change_status_form.booking_status.value, booking_int: change_status_form.booking_int.value }, function(output) { $('#all_bookings_div').load('dash_includes/dash_display_all_bookings.php').fadeIn("slow"); }); }Una vez que se envíe, publicará los datos en dash_change_booking_status.php. Esto funciona muy bien una vez, pero necesito repetir el formulario varias veces, sin saber cuántas veces. Cuando hago esto, el ajax solo funcionará en el primero.
Creo que esto tiene que ver con la identificación del formulario y que debería cambiarlo a clase. ¿Alguien puede decirme cómo a) cambiar la clase de los formularios yb) cómo publicar los datos?
En una nota al margen, si agrego al final de mi formulario, ¡deja de publicarlo!
Según su pregunta, parece que está generando contenido dinámicamente y funciona solo la primera vez. El siguiente código debería funcionar sin involucrarse en la clase o la identificación. ¿Puedes reemplazar <select name="booking_status" onchange="change_status();"> con <select name="booking_status" class = 'booking_status'>
$(document).on("change", "select.booking_status", function(){ var $form = $(this).parents('form:first'); $.post('dash_includes/dash_change_booking_status.php', { booking_status: $form.find("select[name='booking_status']").val(), booking_int: $form.find("input[name='booking_int']").val() }, function(output) { $('#all_bookings_div').load('dash_includes/dash_display_all_bookings.php').fadeIn("slow"); }); });Simplemente podría cambiar el $('#booking_status') a $('.booking_status') pero luego tendrá múltiples valores para su consulta. Debe envolver cada formulario individual en una clase contenedora o identificación única
<form id="form1"> <input type="text" class="booking_status"> </form>Y luego obtenga los datos usando:
$('#form1 .booking_status').val()Puede pasar la identificación del formulario a su función onchange.