GridView中的列有个contentOptions属性,添加此属性,如:
'name' => [
'attribute' => 'name',
'contentOptions' => function($model) {
return ['class' => 'input-editbale-item', 'data-attribute' => 'name', 'data-value' => $model->name, 'data-url' => Url::to('product/edit-column?id=' . $model->id)];
},
],
使用ajax提交数据,当双击列时显示输入框,但敲下enter键时提交
// input 类型
$('.grid-view table .input-editbale-item').each(function() {
$(this).dblclick(function() {
var dataValue = $(this).attr('data-value');
var inputBox = document.createElement('input');
inputBox.name = "item";
inputBox.className = 'item-edit';
inputBox.value = dataValue;
$(this).html(inputBox)
})
})
$('.grid-view table .input-editbale-item').on('keydown', '.item-edit', function(e) {
if (e.keyCode == 13) {
var parent = $(this).parent();
var value = $(this).val();
var oldValue = parent.attr('data-value');
var postUrl = parent.attr('data-url');
var attr = parent.attr('data-attribute');
postUrl = baseBackend + '/' + postUrl;
$.ajax({
type: "POST",
url: postUrl,
dataType: 'json',
data: "_csrf-backend=" + $('meta[name=csrf-token]') + '&value=' + value + '&old_value=' + oldValue + '&attr=' + attr,
success: function(msg){
if(msg.error == 0) {
//window.location.reload();
} else {
alert(msg.msg);
}
}
});
$(this).parent().html(value);
}
})
后台修改数据
public function actionEditColumn($id) {
$value = Yii::$app->request->post('value', '');
$oldValue = Yii::$app->request->post('old_value', '');
$attr = Yii::$app->request->post('attr', '');
if(empty($value) || empty($attr)) {
$data = [
'error' => 1,
'msg' => Yii::t('backend', 'params_error')
];
return json_encode($data);
}
if($value != $oldValue) {
$model = $this->findModel($id);
$model->$attr = $value;
$model->save();
$data = [
'error' => 0,
'msg' => Yii::t('backend', 'update_success')
];
return json_encode($data);
}
}