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 19 PHP
全世界最小的php网页木马一枚 附PHP木马的防范方法
Oct 09 PHP
基于Zend的Captcha机制的应用
May 02 PHP
深入php socket的讲解与实例分析
Jun 13 PHP
php基于GD库画五星红旗的方法
Feb 24 PHP
PHP使用适合阅读的格式显示文件大小的方法
Mar 05 PHP
Yii2配置Nginx伪静态的方法
May 05 PHP
详解PHP中mb_strpos的使用
Feb 04 PHP
thinkPHP框架动态配置用法实例分析
Jun 14 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
Oct 09 PHP
PHP全局使用Laravel辅助函数dd
Dec 26 PHP
php去除deprecated的实例方法
Nov 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
PHP4和PHP5性能测试和对比 测试代码与环境
2007/08/17 PHP
学习ExtJS(一) 之基础前提
2009/10/07 Javascript
javascript+xml实现简单图片轮换(只支持IE)
2012/12/23 Javascript
javascript中定义私有方法说明(private method)
2014/01/27 Javascript
js中通过父级进行查找定位元素
2014/06/15 Javascript
Javascript 读取操作Sql中的Xml字段
2014/10/09 Javascript
解析JavaScript的ES6版本中的解构赋值
2015/07/28 Javascript
jQuery动态星级评分效果实现方法
2015/08/06 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
2015/12/31 Javascript
jQuery中text() val()和html()的区别实例详解
2016/06/28 Javascript
常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数
2016/09/23 Javascript
Vue.js学习之计算属性
2017/01/22 Javascript
jquery.form.js异步提交表单详解
2017/04/25 jQuery
JS之if语句对接事件动作逻辑(详解)
2017/06/28 Javascript
vue 实现全选全不选的示例代码
2018/03/29 Javascript
vue移动端实现下拉刷新
2018/04/22 Javascript
vue动态改变背景图片demo分享
2018/09/13 Javascript
详解vue中v-bind:style效果的自定义指令
2020/01/21 Javascript
基于element-ui封装可搜索的懒加载tree组件的实现
2020/05/22 Javascript
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
Python时间戳与时间字符串互相转换实例代码
2013/11/28 Python
Linux-ubuntu16.04 Python3.5配置OpenCV3.2的方法
2018/04/02 Python
python的time模块和datetime模块实例解析
2019/11/29 Python
python 6.7 编写printTable()函数表格打印(完整代码)
2020/03/25 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
2020/06/02 Python
python3.x中安装web.py步骤方法
2020/06/23 Python
一款利用纯css3实现的360度翻转按钮的实例教程
2014/11/05 HTML / CSS
html5 Canvas画图教程(10)—把面拆成线条模拟出圆角矩形
2013/01/09 HTML / CSS
vivo智能手机官方商城:vivo
2016/09/22 全球购物
行政部总经理岗位职责
2014/01/04 职场文书
国际商务专业职业生涯规划书范文
2014/01/17 职场文书
聚美优品的广告词
2014/03/14 职场文书
化工专业自荐书
2014/06/16 职场文书
普通党员群众路线教育实践活动心得体会
2014/11/04 职场文书
大学生社会实践活动总结报告
2015/05/06 职场文书
用Python简陋模拟n阶魔方
2021/04/17 Python