实际上,我在表格的每一行上都有一个带有javascript(实际上是jquery)的表单的问题:
就像Lothre1所说的那样,“在呈现过程中,某些浏览器会在声明将输入保留在元素之外之后立即关闭form标签”。
这使我的输入字段超出了表单,因此无法使用JAVASCRIPT通过DOM访问表单的子级。
通常,以下JQUERY代码不起作用:
$('#id_form :input').each(function(){/*action*/});
// this is supposed to select all inputS
// within the form that has an id ='id_form'
但是上述示例不适用于渲染的HTML:
<table>
<form id="id_form"></form>
<tr id="tr_id">
<td><input type="text"/></td>
<td><input type="submit"/></td>
</tr>
</table>
我仍在寻找一种干净的解决方案(尽管使用TR'id'参数遍历DOM可以解决此特定问题)
肮脏的解决方案是(对于jQuery):
$('#tr_id :input').each(function(){/*action*/});
// this will select all the inputS
// fields within the TR with the id='tr_id'
上面的例子可以用,但是并不是真正的“干净”,因为它引用TR而不是FORM,并且需要AJAX ...
编辑:与jquery / ajax的完整过程将是:
//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*/
});
});
这样,“ target_for_the_form_treatment”应该接收POST数据,就像已将表单发送给他一样(来自post [1] = 1的appart,但是要实现此解决方案,我建议改为处理data_str的尾部“&”) 。
我仍然不喜欢这个解决方案,但是由于dataTables jquery插件,我不得不使用TABLE结构...