我需要创建一个具有给定值的表单(条目的编辑功能)。
我的表单是由 ajax 代码生成的,如下所示:
echo '<p class="validateTips">Bitte alle Felder ausfüllen!</p>
<form id="coffee_talk_edit" action="edit.php?action=event_edit" method="post" accept-charset="utf-8" enctype="multipart/form-data">
<table>
<tr>
<td class="event_width">Datum:</td>
<td>
<select name="day_from" id="day_from_e">
<option value="none" class="bold italic">Tag</option>';
for($i=1; $i<=31; $i++){
if ($i == $getDate_day) {
echo '<option value="'.$i.'" selected>'.$i.'</option>';
} else echo '<option value="'.$i.'">'.$i.'</option>';
}
echo '</select>
<select name="month_from" id="month_from_e">
<option value="none" class="bold italic">Monat</option>';
for($i=1; $i<=12; $i++){
if ($i == $getDate_month) {
echo '<option value="'.$i.'" selected>'.$month_name[$i].'</option>';
} else echo '<option value="'.$i.'">'.$month_name[$i].'</option>';
}
echo '</select>
<select name="year_from" id="year_from_e">
<option value="none" class="bold italic">Jahr</option>';
for($i=$year; $i>=2008; $i--){
if ($i == $getDate_year) {
echo '<option value="'.$i.'" selected>'.$i.'</option>';
} else echo '<option value="'.$i.'">'.$i.'</option>';
}
echo '</select>
</td>
</tr>
<tr>
<td>Thema:</td>
<td class="topic"><input type="text" name="topic" id="topic_e" value="'.$getTheme.'"/></td>
</tr>
<tr>
<td>Referent:</td>
<td class="contributer"><input type="text" name="contributer" id="contributer_e" value="'.$getContributer.'"/></td>
</tr>
<tr>
<td>Beginn:</td>
<td class="begin"><input type="text" name="begin_hour" id="begin_hour_e" value="'.$getBegin_hour.'"/>:<input type="text" name="begin_min" id="begin_min_e" value="'.$getBegin_min.'"/> Uhr</td>
</tr>
<tr>
<td>Ort:</td>
<td class="place"><input type="text" name="place" id="place_e" value="'.$getPlace.'"/></td>
</tr>
<tr>
<td>Eintritt:</td>
<td class="entrance"><input type="text" name="entrance_euro" id="entrance_euro_e" value="'.$getEntrance_euro.'"/>,<input type="text" name="entrance_cent" id="entrance_cent_e" value="'.$getEntrance_cent.'"/> €</td>
</tr>
<tr>
<td>Flyer:</td>
<td class="flyer">
<input type="hidden" name="MAX_FILE_SIZE" value="5734400">
<input type="file" name="image" id="image">
</td>
</tr>
</table>
<input type="hidden" name="coffee_talk_edit_submit" value="true" />
</form>';
ajax代码:
$(".edit_event").live("click", function() {
var currentID = $(this).data("event-id");
var currentTable = $(this).data("table");
if (currentTable == 'Coffee_talk') {
$.ajax({
url: 'edit.php?action=event_select&id=' + currentID + '&table=' + currentTable,
type: 'GET',
dataType: 'html',
success: function (select) {
$("#dialog_edit_event_coffee_talk").html(select);
$("#dialog_edit_event_coffee_talk").dialog("open");
}
});
return false;
}
}
这是将打开的 jQuery UI 模态表单(带有验证):
var topic_e = $("#topic_e"),
contributer_e = $("#contributer_e"),
place_e = $("#place_e"),
year_from_e = $("#year_from_e"),
month_from_e = $("#month_from_e"),
day_from_e = $("#day_from_e"),
begin_hour_e = $("#begin_hour_e"),
begin_min_e = $("#begin_min_e"),
entrance_euro_e = $("#entrance_euro_e"),
entrance_cent_e = $("#entrance_cent_e"),
allFields_e = $( [] ).add(topic_e).add(contributer_e).add(place_e).add(year_from_e).add(month_from_e).add(day_from_e).add(begin_hour_e)
.add(begin_min_e).add(entrance_euro_e).add(entrance_cent_e);
$( '#dialog_edit_event_coffee_talk' ).dialog({
autoOpen: false,
resizable: false,
height: 370,
width: 400,
modal: true,
buttons: {
"Übernehmen": function() {
var bValid = true;
var form = $('#coffee_talk_edit');
var data = form.serialize();
allFields_e.removeClass( "ui-state-error" );
bValid = bValid && checkEmpty( topic_e );
bValid = bValid && checkEmpty( contributer_e );
bValid = bValid && checkEmpty( place_e );
bValid = bValid && checkNone( year_from_e );
bValid = bValid && checkNone( month_from_e );
bValid = bValid && checkNone( day_from_e );
bValid = bValid && checkRegexp( begin_hour_e, /^([0-9])+$/i, "Nur Zahlen erlaubt" );
bValid = bValid && checkRegexp( begin_min_e, /^([0-9])+$/i, "Nur Zahlen erlaubt" );
bValid = bValid && checkRegexp( entrance_euro_e, /^([0-9])+$/i, "Nur Zahlen erlaubt" );
bValid = bValid && checkRegexp( entrance_cent_e, /^([0-9])+$/i, "Nur Zahlen erlaubt" );
alert (bValid);
if ( bValid ) {
alert('valid');
$.ajax({
url: "include/scripts/event_edit.php",
type: "POST",
data: data,
dataType: 'json',
success: function (reqCode) {
//Termin erfolgreich bearbeitet
$("#dialog_edit_event_ok").dialog( "open" );
$("#dialog_edit_event_coffee_talk").dialog( "close" );
}
});
}
},
"Schließen": function() {
$( this ).dialog( "close" );
}
},
close: function() {
allFields.val( "" ).removeClass( "ui-state-error" );
}
});
无需在 ajax 中生成表单,一切正常。仅使用 $("#dialog_edit_event_coffee_talk").html(select); 生成表单 不被识别。
所以这一步
var form = $('#coffee_talk_edit');
var data = form.serialize();
不工作。我无法对表单产生任何影响(ID 为 #coffee_talk_edit)。即使我会删除验证内容,也永远无法提交新的 ajax 请求,因为表单无法识别。
我认为它缺少 .live() 问题。但我不知道如何处理这个。知道怎么做吗?