yii2中结合gridview如何使用modal弹窗实例代码详解


Posted in PHP onJune 12, 2016

在上篇文章给大家介绍了Yii2中如何使用modal弹窗(基本使用),即以创建为例。

实际开发中,我们往往还会遇到列表页数据修改要使用modal的情况,如果是一般的循环展示,相信大多数人看了modal的基本使用都会操作,但是结合gridview估计有些人就开始吃不消了,我们看看如何解决这个问题!

1、gridview的操作增加[更新]按钮,并指定data-toggle data-target class以及data-id的值

[
'class' => 'yii\grid\ActionColumn',
'template' => '{update}', 
'buttons' => [
'update' => function ($url, $model, $key) {
return Html::a('更新', '#', [
'data-toggle' => 'modal',
'data-target' => '#update-modal',
'class' => 'data-update',
'data-id' => $key,
]);
},
],
],

2、为更新添加modal

<?php 
use yii\bootstrap\Modal;
// 更新操作
Modal::begin([
'id' => 'update-modal',
'header' => '<h4 class="modal-title">更新</h4>',
'footer' => '<a href="#" class="btn btn-primary" data-dismiss="modal">Close</a>',
]); 
$requestUpdateUrl = Url::toRoute('update');
$updateJs = <<<JS
$('.data-update').on('click', function () {
$.get('{$requestUpdateUrl}', { id: $(this).closest('tr').data('key') },
function (data) {
$('.modal-body').html(data);
} 
);
});

JS;

$this->registerJs($updateJs);
Modal::end();
?>

3、修改我们的update方法

public function actionUpdate($id)
{
$model = $this->findModel($id);
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['index']);
} else {
return $this->renderAjax('update', [
'model' => $model,
]);
}
}

可以看出整个过程中跟我们之前说的modal基本使用没什么差别。但是到此并没有结束,相信大多数人可能会遇到下面常见的几个难以解决的问题:

yii2 modal中使用了select2 为什么搜索框不可搜索?

yii2 单个页面多个modal 为什么页面会共用一个,等数据加载完了才好?

yii2 单个页面多个modal,以单个页面添加和我们上面的gridview更新均使用modal为例,当使用select2时,为什么更新的select2会失效不起作用?

下面我们看如何一个一个的解决掉这些问题:

首先第一个问题,你只需要在modal使用begin的时候指定options选项的tabindex为false即可,参考如下:

Modal::begin([
// ......
'options' => [
'tabindex' => false 
],
]);

第二个和第三个问题,都是在单个页面中使用多个modal所引起的,为了说明问题,我们在某列表内[创建]按钮和gridview中[更新]按钮中均使用modal。按照我们Yii2中如何使用modal弹窗(基本使用)和本篇文章所述,第一个问题很明显是

$('.modal-body').html(data);

所引起的,多个modal,在我们第一次使用modal之后给所有modal的body赋值了,以至于在后面使用其他modal时,在未请求到数据之前均显示相同内容的bug。解决该问题只需要在每次异步请求之后对各自的modal-body单独赋值即可,代码可参考如下:

$('#create').on('click', function () {
$.get('url', {},
function (data) {
$('#create-modal').find('.modal-body').html(data);
// $('.modal-body').html(data);
} 
);
});
$('.data-update').on('click', function () {
$.get('{$requestUpdateUrl}', { id: $(this).closest('tr').data('key') },
function (data) {
$('#update-modal').find('.modal-body').html(data);
// $('.modal-body').html(data);
} 
);
});

看最后一个问题,使用过select2的同学要注意了!!!

如果说像我们本篇主题所介绍的例子这样,form中带select2的话,就会导致仅仅在[创建]时select2正常,[更新]操作时select2字段“隐藏”的效果!

这其实是同一页面相同select2对应的id导致的,解决该问题只需要在每次异步请求数据之前,移除掉页面上所有已存在的表单项即可。看具体实现:

$('#create').on('click', function () {
// 有效避免multiply modal select2的问题
// 移除异步加载过来的form表单
$('.document-nav-form').remove();
$.get('{$requestUrl}', {},
function (data) {
$('#create-modal').find('.modal-body').html(data);
} 
);
});
$('.data-update').on('click', function () {
// 有效避免multiply modal select2的问题
// 移除异步加载过来的form表单
$('.document-nav-form').remove();
$.get('{$requestUpdateUrl}', { id: $(this).closest('tr').data('key') },
function (data) {
$('#update-modal').find('.modal-body').html(data);
} 
);
});

以上所述是小编给大家介绍的yii2中结合gridview如何使用modal弹窗实例代码详解的全部叙述,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
与数据库连接
Oct 09 PHP
PHP新手上路(三)
Oct 09 PHP
apache rewrite_module模块使用教程
Jan 10 PHP
php带密码功能并下载远程文件保存本地指定目录 修改加强版
May 16 PHP
PHP安全技术之 实现php基本安全
Sep 04 PHP
php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
Jan 17 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
Jul 30 PHP
Yii2下点击验证码的切换实例代码
Mar 14 PHP
Yii2 如何在modules中添加验证码的方法
Jun 19 PHP
PHP策略模式定义与用法示例
Jul 27 PHP
PHP实现Markdown文章上传到七牛图床的实例内容
Feb 11 PHP
Laravel实现批量更新多条数据
Apr 06 PHP
最新最全PHP生成制作验证码代码详解(推荐)
Jun 12 #PHP
再谈PHP中单双引号的区别详解
Jun 12 #PHP
PHP中strpos、strstr和stripos、stristr函数分析
Jun 11 #PHP
linux下php上传文件注意事项
Jun 11 #PHP
php设计模式之单例模式代码
Jun 11 #PHP
浅谈PHP Cookie处理函数
Jun 10 #PHP
php单例模式的简单实现方法
Jun 10 #PHP
You might like
php mssql 数据库分页SQL语句
2008/12/16 PHP
PHP 登录完成后如何跳转上一访问页面
2014/01/14 PHP
php开启与关闭错误提示适用于没有修改php.ini的权限
2014/10/16 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
php实现将数据做成json的格式给前端使用
2018/08/21 PHP
PHP让网站移动访问更加友好方法
2019/02/14 PHP
js文字滚动停顿效果代码
2008/06/28 Javascript
JavaScript入门教程(7) History历史对象
2009/01/31 Javascript
JavaScript 拾漏补遗
2009/12/27 Javascript
javascript 打开页面window.location和window.open的区别
2010/03/17 Javascript
uploadify 3.0 详细使用说明
2012/06/18 Javascript
点击标签切换和自动切换DIV选项卡
2014/08/10 Javascript
node.js中的fs.appendFileSync方法使用说明
2014/12/17 Javascript
JS实现图片放大缩小的方法
2017/02/15 Javascript
js oncontextmenu事件使用详解
2017/03/25 Javascript
微信小程序图片宽100%显示并且不变形
2017/06/21 Javascript
基于JavaScript实现前端数据多条件筛选功能
2020/08/19 Javascript
jQuery实现table表格信息的展开和缩小功能示例
2018/07/21 jQuery
基于layui的table插件进行复选框联动功能的实现方法
2019/09/19 Javascript
vue3修改link标签默认icon无效问题详解
2019/10/09 Javascript
vue监听滚动事件的方法
2020/12/21 Vue.js
python静态方法实例
2015/01/14 Python
python负载均衡的简单实现方法
2018/02/04 Python
解决python测试opencv时imread导致的错误问题
2019/01/26 Python
超简单使用Python换脸实例
2019/03/27 Python
python或C++读取指定文件夹下的所有图片
2019/08/31 Python
详解KMP算法以及python如何实现
2020/09/18 Python
webView加载html图片遇到的问题解决
2019/10/08 HTML / CSS
东方通信股份有限公司VC面试题
2014/08/27 面试题
假面舞会策划方案
2014/05/29 职场文书
维护民族团结演讲稿
2014/08/27 职场文书
军人离婚协议书样本
2014/10/21 职场文书
销售经理工作失职检讨书
2014/10/24 职场文书
公务员政审材料范文
2014/12/23 职场文书
乡镇法制宣传日活动总结
2015/05/05 职场文书
MySQL优化之如何写出高质量sql语句
2021/05/17 MySQL