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 相关文章推荐
php 动态执行带有参数的类方法
Apr 10 PHP
php和js如何通过json互相传递数据相关问题探讨
Feb 26 PHP
PHP不用第三变量交换2个变量的值的解决方法
Jun 02 PHP
编译php 5.2.14+fpm+memcached(具体操作详解)
Jun 18 PHP
PHP中实现Bloom Filter算法
Mar 30 PHP
php无限分类使用concat如何实现
Nov 05 PHP
PHP通过加锁实现并发情况下抢码功能
Aug 10 PHP
关于PHP内置的字符串处理函数详解
Feb 04 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 PHP
PHP中如何使用Redis接管文件存储Session详解
Nov 28 PHP
PHP从零开始打造自己的MVC框架之路由类实现方法分析
Jun 03 PHP
laravel-admin 后台表格筛选设置默认的查询日期方法
Oct 03 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中文分词的简单实现代码分享
2011/07/17 PHP
PHP实现的封装验证码类详解
2013/06/18 PHP
PHP实现对文本数据库的常用操作方法实例演示
2014/07/04 PHP
PHP实现的网站目录扫描索引工具
2016/09/08 PHP
PHP+MySQL使用mysql_num_rows实现模糊查询图书信息功能
2018/05/31 PHP
JS控制表格隔行变色
2006/06/26 Javascript
use jscript Create a SQL Server database
2007/06/16 Javascript
jquery插件制作 表单验证实现代码
2012/08/17 Javascript
Js实现手机发送验证码时按钮延迟操作
2014/06/20 Javascript
javascript的tab切换原理与效果实现方法
2015/01/10 Javascript
js实现对ajax请求面向对象的封装
2016/01/08 Javascript
浅析创建javascript对象的方法
2016/05/13 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
D3.js实现拓扑图的示例代码
2018/06/30 Javascript
移动端图片上传旋转、压缩问题的方法
2018/10/16 Javascript
Python查询Mysql时返回字典结构的代码
2012/06/18 Python
python实现电子词典
2020/04/23 Python
Python实现希尔排序算法的原理与用法实例分析
2017/11/23 Python
儿童python练习实例
2018/05/27 Python
Python迭代器与生成器用法实例分析
2018/07/09 Python
利用pyinstaller打包exe文件的基本教程
2019/05/02 Python
python中安装django模块的方法
2020/03/12 Python
Python3通过chmod修改目录或文件权限的方法示例
2020/06/08 Python
Python中猜拳游戏与猜筛子游戏的实现方法
2020/09/04 Python
HTML5标签嵌套规则详解【必看】
2016/04/26 HTML / CSS
幼师专业求职推荐信
2013/11/08 职场文书
生物科学专业职业规划书范文
2014/02/11 职场文书
人事科岗位职责范本
2014/03/02 职场文书
春节联欢会策划方案
2014/05/16 职场文书
土建工程师岗位职责
2014/06/10 职场文书
2014入党积极分子批评与自我批评思想汇报
2014/09/20 职场文书
西柏坡导游词
2015/02/05 职场文书
煤矿施工安全协议书
2016/03/22 职场文书
python使用pygame创建精灵Sprite
2021/04/06 Python
python实现三次密码验证的示例
2021/04/29 Python
使用CSS设置滚动条样式
2022/01/18 HTML / CSS