我在Drupal 7中创建了一个表单,并希望使用
AJAX.我添加到提交按钮数组:
"#ajax" => array( "callback" => "my_callback","wrapper" => "details-container","effect" => "fade" )
这是有效的,但整个验证功能都被忽略.在调用my_callback()之前,如何验证表单?如何在AJAX表单上显示状态或错误消息?
解决方法
这个问题和答案帮助我指导了正确的解决方案,但并不完全清楚.让我们这样做
事情要非常了解:
>验证错误消息将放置在#ajax [‘wrapper’]中指定的任何内容中
>请密切注意Drupal Forms API documentation of the ajax wrapper所说的“具有此ID的整个元素被替换,而不仅仅是元素的内容.”
>因为这个元素被替换,你最好再提供它.这就是为什么Marius Ilie的回答是有效的 – 不是因为数组和#markup,而是因为他包含了设置了包装器id的div.
function dr_search_test_form($form,&$fstate) { $form["wrapper"] = array("#markup" => "<div id='test-ajax'></div>"); $form["name"] = array( "#type" => "textfield","#required" => true,"#title" => "Name" ); $form["submit"] = array( "#type" => "submit","#value" => t("Send"),"#ajax" => array( "callback" => "dr_search_test_form_callback","wrapper" => "test-ajax","effect" => "fade",),); return $form; } function dr_search_test_form_callback($form,&$fstate) { return "<div id='test-ajax'>Wrapper Div</div>"; } function dr_search_test_form_validate($form,&$fstate) { form_set_error("name","Some error to display."); }