slickgrid列にリストボックスが定義されています。リストボックスからオプションを選択するには、最初にセルを選択する必要があり、次にリストボックスからオプションを選択できるという問題があります。したがって、ユーザーは1回ではなく2回クリックする必要があります。ユーザーがワンクリックでリストボックスを開いて必要な値を選択できるようにするには、何をする必要がありますか。
次のセルフォーマッタとエディタを使用して、リストボックスを表示します。
フォーマッター:
function SelectCellFormatter(row, cell, value, columnDef, dataContext) {
opt_values = columnDef.options.split(',');
option_str = "";
for( i in opt_values ){
v = opt_values[i];
if(v == value)
{
option_str += "<OPTION value='"+v+"' selected>"+v+"</OPTION>";
}
else
{
option_str += "<OPTION value='"+v+"'>"+v+"</OPTION>";
}
}
return "<SELECT tabIndex='0' class='editor-select'>"+ option_str +"</SELECT>"
}
編集者:
SelectCellEditor : function(args) {
var $select;
var defaultValue;
var scope = this;
this.init = function() {
if(args.column.options){
opt_values = args.column.options.split(',')
} else {
opt_values ="yes,no".split(',');
}
option_str = ""
for( i in opt_values ){
v = opt_values[i];
option_str += "<OPTION value='"+v+"'>"+v+"</OPTION>";
}
$select = $("<SELECT tabIndex='0' class='editor-select'>"+ option_str +"</SELECT>");
$select.appendTo(args.container);
$select.focus();
};
this.destroy = function() {
$select.remove();
};
this.focus = function() {
$select.focus();
};
this.loadValue = function(item) {
defaultValue = item[args.column.field];
$select.val(defaultValue);
};
this.serializeValue = function() {
if(args.column.options){
return $select.val();
} else {
return ($select.val() == "yes");
}
};
this.applyValue = function(item,state) {
item[args.column.field] = state;
};
this.isValueChanged = function() {
return ($select.val() != defaultValue);
};
this.validate = function() {
return {
valid: true,
msg: null
};
};
this.init();
}