默認的CGridView,點擊「刪除」按鈕所觸發的腳本-默認是用javascript 的confirm方法彈出確認對話框,不太美觀。且如何更改彈出的對話框中的內容?javascript
下面的腳本是由YII自動生成的。php
[php] view plaincopyhtml
$(document).on('click','#staff-grid a.delete', function() { java
if(!confirm("你肯定要這麼作?")) return false;; ajax
var th=this; json
var afterDelete=function(link,success,data){ if(success) art_alert(1,data,false);; }; app
$.fn.yiiGridView.update('manager-grid', { yii
type:'POST', ide
url:$(this).attr('href'),// post
success:function(data) {
$.fn.yiiGridView.update('manager-grid');
afterDelete(th,true,data);
},
error:function(XHR) {
return afterDelete(th,false,XHR);
}
});
return false;
});
如何改變confirm的內容?
[php] view plaincopy
array(
'class'=>'CButtonColumn',
'deleteConfirmation'=>"js:'在這裏寫上你想要的內容嘍,好比肯定刪除 '+$(this).parent().parent().find('td:eq(1)').html()+'?'",
'header'=>'功能操做',
'updateButtonImageUrl'=>false,//當你設置 xxxButtonImageUrl 的屬性爲空或 false 時,文本形式的連接將會代替圖片顯示.
'deleteButtonImageUrl'=>false,
'template'=>'{update} {delete}',
'headerHtmlOptions'=>array('class'=>'title','width'=>'15%'),
),
如何實現換個對話框框樣式?
我的以爲這個彈出的框框不太美觀,我通常是用artDialog中的confirm方法。
[javascript] view plaincopy
art.dialog.confirm('確認刪除該新聞嗎?',function(){
//執行的內容
});
確認對話框以下圖所示:
第一想法是重寫confirm方法。
[javascript] view plaincopy
<script>
function confirm($str)
{
art.dialog.confirm('確認刪除該新聞嗎?',function(){
//執行的內容
});
}
</script>
結果不行。由於:artDialog中的confirm方法不返回值。上面的重寫方法中,程序一直執行,好比:
[javascript] view plaincopy
<script>
function confirm($str)
{
alert(1);
art.dialog.confirm('確認刪除該新聞嗎?',function(){
alert(2);
});
alert(3);
}
</script>
當執行該重寫的方法時,先彈出1,接着彈出對話框「確認刪除該新聞嗎?」,接着又彈出3。
[javascript] view plaincopy
$(document).on('click','#staff-grid a.delete', function() {
if(!confirm("你肯定要這麼作?")) return false;;
var th=this;
var afterDelete=function(link,success,data){ if(success) art_alert(1,data,false);; };
$.fn.yiiGridView.update('manager-grid', {
type:'POST',
url:$(this).attr('href'),//
success:function(data) {
$.fn.yiiGridView.update('manager-grid');
afterDelete(th,true,data);
},
error:function(XHR) {
return afterDelete(th,false,XHR);
}
});
return false;
});
若是在alert(3)處換爲return true,那麼在彈出對話框「確認刪除該新聞嗎?」,無論點肯定或取消,上句代碼已是return false了,程序不會繼續執行
若是在alert(3)處換爲return false,那麼點擊「刪除」,一彈出對話框後,程序當即進行刪除,無需點「肯定」和「刪除」。
好了,廢話很少說,提供解決方案:
[php] view plaincopy
$afterDelete = 'function(link,success,data){ if(success) art_alert(1,data,false);}';
$delete=<<<EOD
function(event) {
art.dialog.confirm('確認刪除該新聞嗎?',function(){
var th=event.target;
var afterDelete=$afterDelete;
$.fn.yiiGridView.update('staff-grid', {
type:'POST',
url:$(th).attr('href'),//$csrf
success:function(data) {
$.fn.yiiGridView.update('staff-grid');
afterDelete(th,true,data);//只有'ajaxUpdate' => false,設置爲true,才經過ajax post提交。不然就是通常性質的post刪除。
},
error:function(XHR) {
return afterDelete(th,false,XHR);
}
});
//alert($(th).attr('href'));
return true;
});
return false;
}
EOD;
array(
'class'=>'CButtonColumn',
'deleteConfirmation'=>"js:'肯定刪除 '+$(this).parent().parent().find('td:eq(1)').html()+'?'",
'header'=>'功能操做',
'updateButtonImageUrl'=>false,//當你設置 xxxButtonImageUrl 的屬性爲空或 false 時,文本形式的連接將會代替圖片顯示.
'deleteButtonImageUrl'=>false,
'template'=>'{update} {delete}',
'headerHtmlOptions'=>array('class'=>'title','width'=>'15%'),
//如下代碼爲重寫delete按鈕相關內容
'buttons'=>array(
'delete'=>array(
'label'=>'刪除',
'url'=>'Yii::app()->controller->createUrl("manager/delete",array("id"=>$data->id))',
'click'=>$delete,
),
),
),
經過覆蓋默認的delete按鈕事件,可達到想要效果。具體不解釋了,很easy。
進一步優化使用:
[php] view plaincopy
......
$afterDelete = 'function(link,result,data){
if(result===true){
$.fn.yiiGridView.update("manager-grid");//$(link).parents("ul:first").hide();
art.dialog.tips(data.msg);//art_alert(1,data.msg,false);
}
else
art.dialog.tips(data.msg);//art_alert(0,data.msg,false);
}';
$delete=<<<EOD
function(event) {
art.dialog.confirm('確認刪除該賬戶嗎?',function(){
var th=event.target;
var afterDelete=$afterDelete;
$.fn.yiiGridView.update('manager-grid', {
type:'POST',
dataType:'json',
data:{'YII_CSRF_TOKEN':YII_CSRF_TOKEN},
url:$(th).attr('href'),
success:function(data) {
afterDelete(th,data.result,data);
},
error:function(XHR) {
return afterDelete(th,false,XHR);
}
});
});
return false;
}
EOD;
$this->widget('zii.widgets.grid.CGridView', array(
'ajaxUpdate' => true,
......