Tatsächlich habe ich das Problem mit einem Formular in jeder Zeile einer Tabelle mit Javascript (eigentlich jquery):
Wie Lothre1 sagte, "schließen einige Browser beim Rendern das Formular-Tag direkt nach der Deklaration und lassen Eingaben außerhalb des Elements."
Dadurch werden meine Eingabefelder AUSSERHALB des Formulars erstellt, sodass ich mit JAVASCRIPT nicht über das DOM auf die untergeordneten Elemente meines Formulars zugreifen kann.
Normalerweise funktioniert der folgende JQUERY-Code nicht:
$('#id_form :input').each(function(){/*action*/});
// this is supposed to select all inputS
// within the form that has an id ='id_form'
ABER das obige Beispiel funktioniert nicht mit dem gerenderten HTML:
<table>
<form id="id_form"></form>
<tr id="tr_id">
<td><input type="text"/></td>
<td><input type="submit"/></td>
</tr>
</table>
Ich bin immer noch auf der Suche nach einer sauberen Lösung (obwohl die Verwendung des Parameters TR 'id' zum Durchlaufen des DOM dieses spezielle Problem beheben würde)
schmutzige Lösung wäre (für jquery):
$('#tr_id :input').each(function(){/*action*/});
// this will select all the inputS
// fields within the TR with the id='tr_id'
Das obige Beispiel wird funktionieren, aber es ist nicht wirklich "sauber", da es sich auf das TR anstelle des FORMULARS bezieht UND AJAX erfordert ...
EDIT: vollständiger Prozess mit jquery / ajax wäre:
//init data string
// the dummy init value (1=1)is just here
// to avoid dealing with trailing &
// and should not be implemented
// (though it works)
var data_str = '1=1';
// for each input in the TR
$('#tr_id :input').each(function(){
//retrieve field name and value from the DOM
var field = $(this).attr('name');
var value = $(this).val();
//iterate the string to pass the datas
// so in the end it will render s/g like
// "1=1&field1_name=value1&field2_name=value2"...
data_str += '&' + field + '=' + value;
});
//Sendind fields datawith ajax
// to be treated
$.ajax({
type:"POST",
url: "target_for_the_form_treatment",
data:data_string,
success:function(msg){
/*actions on success of the request*/
});
});
Auf diese Weise sollte das "target_for_the_form_treatment" POST-Daten empfangen, als ob ein Formular an ihn gesendet worden wäre (Teil von der Post [1] = 1, aber um diese Lösung zu implementieren, würde ich empfehlen, stattdessen das nachfolgende '&' der data_str zu behandeln). .
Ich mag diese Lösung immer noch nicht, aber ich bin gezwungen, die TABLE-Struktur zu verwenden, weil das jTery-Plugin dataTables ...