我在 SO 和其他博客中尝试了很多解决方案,但我似乎无法完成这项工作。
我在这里使用 jQuery Validation 插件和 jQuery ui Dialog。
这是我的对话框:
$('#dialog_update').dialog({
autoOpen: false,
modal: true,
width: 600,
height: 540,
resizable: false,
draggable: false,
buttons: {
Cancel: function() {
$( this ).dialog( "close" );
},
"Save": function() {
$("#dialog_update").submit();
$.ajax({
url: site_url + "/consultation/update/" + $("#r_id").attr("data"),
type: "POST",
data: {
'date' : $("#date").val(),
'service_type' : $("#service_type").val(),
'new_revisit' : $("#new_revisit").val(),
'admission' : $("#admission").val(),
'emergency' : $("#emergency").val(),
'indigent' : $("#indigent").val(),
'philhealth' : $("#philhealth").val(),
'height' : $("#height").val(),
'height_type' : $("#height_type").val(),
'weight' : $("#weight").val(),
'weight_type' : $("#weight_type").val(),
'bp' : $("#bp").val(),
'chief_complaint': $("#chief_complaint").val(),
'diagnosis' : $("#diagnosis").val(),
'medication' : $("#medication").val(),
'remarks' : $("#remarks").val(),
'pid' : id
},
dataType: "html",
success: function(data) {
obj = JSON && JSON.parse(data) || $.parseJSON(data);
window.location = obj.url + "/" + obj.id;
}
});
}
}
});
我的验证器:
$("#dialog_update").validate({
errorContainer: "#errorblock-div1, #errorblock-div2",
errorLabelContainer: "#errorblock-div2 ul",
wrapper: "li",
rules: {
date: "required"
},
messages: {
date: "Please enter a date."
},
submitHandler: function(form) {
jQuery(form).ajaxSubmit({
target: '#client-script-return-data',
success: function() {
$('#my-modal-form').dialog('close');
successEvents('#client-script-return-msg');
}
});
}
});
打开对话框的那个:
$(".update").click(function() {
var r_id = $(this).attr('data');
$("#dialog_update")
.load(site_url + '/consultation/update_form/' + r_id, createDatepicker)
.dialog('open');
});
我无法进行验证。在某些时候,它会抛出一个错误,比如“设置”上的未捕获类型错误。此外,该对话框有一个日期选择器。
编辑更多信息:使用的插件:bassistance.de/jquery-plugins/jquery-plugin-validation/
错误:Uncaught TypeError: Cannot read property 'settings' of undefined
Save
此外,单击按钮时会发生该错误。当该错误显示时,日期选择器将不再关闭。请注意,我只添加了一条规则,date
因为我仍在测试它。