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
在任意字符集下正常显示网页的方法一
Apr 01 PHP
Sorting Array Values in PHP(数组排序)
Sep 15 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
Aug 08 PHP
PHP开发框架kohana中处理ajax请求的例子
Jul 14 PHP
php技术实现加载字体并保存成图片
Jul 27 PHP
php微信公众平台开发之获取用户基本信息
Aug 17 PHP
PHP 数组基本操作方法详解
Jun 17 PHP
thinkPHP实现的省市区三级联动功能示例
May 05 PHP
ecshop添加菜单及权限分配问题
Nov 21 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
Oct 12 PHP
Laravel5框架自定义错误页面配置操作示例
Apr 17 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 JS Ip地址及域名格式检测代码
2013/09/27 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
2017/05/02 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
javascript 一段左右两边随屏滚动的代码
2009/06/18 Javascript
jquery tools之tooltip
2009/07/25 Javascript
javascript中删除指定数组中指定的元素的代码
2011/02/12 Javascript
什么是DOM(Document Object Model)文档对象模型
2012/03/05 Javascript
jquery动感漂浮导航菜单代码分享
2020/04/15 Javascript
jQuery实现美观的多级动画效果菜单代码
2015/09/06 Javascript
JavaScript编写一个简易购物车功能
2016/09/17 Javascript
JS取模、取商及取整运算方法示例
2016/10/13 Javascript
详解Vue微信公众号开发踩坑全记录
2017/08/21 Javascript
JS实现的简单标签点击切换功能示例
2017/09/21 Javascript
详解vue的diff算法原理
2018/05/20 Javascript
layer设置maxWidth及maxHeight解决方案
2019/07/26 Javascript
jquery添加div实现消息聊天框
2020/02/08 jQuery
浅谈vue 组件中的setInterval方法和window的不同
2020/07/30 Javascript
Python中的groupby分组功能的实例代码
2018/07/11 Python
python使用多进程的实例详解
2018/09/19 Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
2019/06/17 Python
详解Python 字符串相似性的几种度量方法
2019/08/29 Python
python处理写入数据代码讲解
2020/10/22 Python
python代码实现图书管理系统
2020/11/30 Python
Python用户自定义异常的实现
2020/12/25 Python
HTML5 Canvas中绘制椭圆的4种方法
2015/04/24 HTML / CSS
Expedia泰国:预订机票、酒店和旅游包(航班+酒店)
2016/09/27 全球购物
兰蔻美国官网:Lancome美国
2017/04/25 全球购物
网上开商店的创业计划书
2014/01/19 职场文书
大学秋游活动方案
2014/02/11 职场文书
大学生活自我评价
2014/04/09 职场文书
2014年音乐教师工作总结
2014/12/03 职场文书
物流仓管员岗位职责
2015/04/01 职场文书
项目备案申请报告
2015/05/15 职场文书
php微信小程序解包过程实例详解
2021/03/31 PHP
Python基本知识点总结
2022/04/07 Python