作者:亚艾元技术部
Drupal8对ajax,模态框的支持非常友好,我们在客户的项目中,多次使用,为客户的项目提供了友好的用户体验。
客户想增加一个cancel按钮,点击cancel关闭模态框,我们是这样实现的,增加cancel按钮:
if ($this->isDialog()) {
$form['submit'] = [
'#type' => 'submit',
'#value' => $this->t('保存'),
'#prefix' => '<div id="submit-button-container">',
'#suffix' => '</div>',
'#ajax' => array(
'callback' => '::ajaxSubmit',
'event' => 'click',
),
];
$form['cancel'] = [
'#type' => 'button',
'#value' => $this->t('取消'),
'#prefix' => '<div id="cancel-button-container">',
'#suffix' => '</div>',
];
}
追加我们的库
$form['#attached']['library'][] = 'myuser/userform';
在我们的对应js文件中,增加js代码:
(function ($, Drupal) {
//drupalSettings.fluffiness.cuddlySlider.baz
//console.log(drupalSettings);
'use strict';
/**
* Add custom js.
*
* @type {Drupal~behavior}
*
* @prop {Drupal~behaviorAttach} attach
*
*/
Drupal.behaviors.userform = {
attach: function (context, settings) {
$(context).find('#cancel-button-container input').click(function (e) {
e.preventDefault();
$('.ui-dialog-titlebar .ui-dialog-titlebar-close').click();
});
}
};
}(jQuery, Drupal));这段js代码的作用,就是点击cancel按钮的时候,触发点击模态框右上角的关闭按钮。我们没有找到直接关闭模态框的函数,这样,也能很好的解决问题。

