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编写大型网站问题集
Mar 06 PHP
windows下升级PHP到5.3.3的过程及注意事项
Oct 12 PHP
提高define性能的php扩展hidef的安装和使用
Jun 14 PHP
PHP查询数据库中满足条件的记录条数(两种实现方法)
Jan 29 PHP
9个实用的PHP代码片段分享
Jan 22 PHP
PHP性能分析工具XHProf安装使用教程
May 13 PHP
1亿条数据如何分表100张到Mysql数据库中(PHP)
Jul 29 PHP
php ajax异步读取rss文档数据
Mar 29 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
Nov 15 PHP
PHP/HTML混写的四种方式总结
Feb 27 PHP
Thinkphp 框架扩展之驱动扩展实例分析
Apr 27 PHP
PHP dirname功能及原理实例解析
Oct 28 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函数实现分页含文本分页和数字分页
2014/10/23 PHP
PHP中Memcache操作类及用法实例
2014/12/12 PHP
php超快高效率统计大文件行数
2015/07/05 PHP
PHP+ajax分页实例简析
2015/12/07 PHP
Laravel框架在本地虚拟机快速安装的方法详解
2018/06/11 PHP
php实现断点续传大文件示例代码
2020/06/19 PHP
jQuery.datatables.js插件用法及api实例详解
2016/10/28 Javascript
angularjs实现的前端分页控件示例
2017/02/10 Javascript
vue实现点击关注后及时更新列表功能
2018/06/26 Javascript
详解从react转职到vue开发的项目准备
2019/01/14 Javascript
微信小程序全局变量功能与用法详解
2019/01/22 Javascript
微信小程序扫描二维码获取信息实例详解
2019/05/07 Javascript
three.js利用gpu选取物体并计算交点位置的方法示例
2019/11/25 Javascript
如何使用JS console.log()技巧提高工作效率
2020/10/14 Javascript
Python脚本判断 Linux 是否运行在虚拟机上
2015/04/25 Python
简单上手Python中装饰器的使用
2015/07/12 Python
使用Python实现博客上进行自动翻页
2017/08/23 Python
python机器学习之决策树分类详解
2017/12/20 Python
python实现感知器算法(批处理)
2019/01/18 Python
python环境路径配置以及命令行运行脚本
2019/04/02 Python
Python零基础入门学习之输入与输出
2019/04/03 Python
python getpass模块用法及实例详解
2019/10/07 Python
python对验证码降噪的实现示例代码
2019/11/12 Python
使用Pytorch来拟合函数方式
2020/01/14 Python
表单button的outline在firefox浏览器下的问题
2012/12/24 HTML / CSS
英国奢侈皮具品牌:Aspinal of London
2018/09/02 全球购物
Ashford台湾:以折扣价提供奢华的男女用表款
2019/12/04 全球购物
介绍一下gcc特性
2012/01/20 面试题
毕业生简单求职信
2013/11/19 职场文书
文明家庭先进事迹材
2014/01/27 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
2014年乡镇民政工作总结
2014/12/02 职场文书
党支部工作总结2015
2015/04/01 职场文书
消防宣传标语大全
2015/08/03 职场文书
人民调解协议书
2016/03/21 职场文书
15个值得收藏的JavaScript函数
2021/09/15 Javascript