回答
我假設你的意思是一個自定義單元格編輯器。 下面是一個來自slick.editors.js的基於select-based布爾單元格編輯器的示例。您可以輕鬆修改它以使用任意一組可能的值。
function YesNoSelectCellEditor($container, columnDef, value, dataContext) {
var $select;
var defaultValue = value;
var scope = this;
this.init = function() {
$select = $("<SELECT tabIndex='0' class='editor-yesno'><OPTION value='yes'>Yes</OPTION><OPTION value='no'>No</OPTION></SELECT>");
if (defaultValue)
$select.val('yes');
else
$select.val('no');
$select.appendTo($container);
$select.focus();
};
this.destroy = function() {
$select.remove();
};
this.focus = function() {
$select.focus();
};
this.setValue = function(value) {
$select.val(value);
defaultValue = value;
};
this.getValue = function() {
return ($select.val() == 'yes');
};
this.isValueChanged = function() {
return ($select.val() != defaultValue);
};
this.validate = function() {
return {
valid: true,
msg: null
};
};
this.init();
};
您可能不想爲每個選項範圍製作新的選擇編輯器。此外,您可能事先並不知道所有期權價值的範圍。
在這種情況下,您需要選擇類型編輯器中的靈活選項範圍。爲了做到這一點,你可以像下面添加一個額外的選項,您的列定義(例如所謂的選項):
var columns = [
{id:"color", name:"Color", field:"color", options: "Red,Green,Blue,Black,White", editor: SelectCellEditor},
{id:"lock", name:"Lock", field:"lock", options: "Locked,Unlocked", editor: SelectCellEditor}
]
和訪問,在你自己的SelectEditor
對象的這樣的init方法使用args.column.options
:
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();
}
太棒了!我不僅使用你的想法來添加一個'select',而且這個例子對於更好地理解如何向編輯傳遞參數也很有用。 – madth3 2013-04-04 01:28:58
@Matthijs是否可以添加動態選項?即假設我在網格中有兩個下拉菜單作爲編輯器,根據第一個選擇,我想在第二個下拉菜單中選擇後面的選項。可能嗎? – 2014-11-12 07:02:18
@VivekVardhan - 是的,傳入一個返回值集合的函數 – 2015-02-16 16:53:34
如果您的單元格已經包含帶有多個選項的「select」標籤,則可以從args中提取此html。這種方法與以前的答案不同,但我個人對這些解決方案感到困擾,當然我的單元格已經包含了一個select-tag。我想重複使用這個單元,而不是在this.init
中完全重建它。同樣,我想使用相同的選項,因爲我現有選擇已經有了,而不是他們解析到var column = { ...
的$(args.item[ args.column.field ])
返回活性細胞含量,基本上只得到重新附加到的container
保持(細胞對象)。從if (document.createEvent)
開始,它只是一個功能,可以在激活時自動打開下拉菜單;當你使用tabulator導航到單元格時。
function SelectCellEditor(args) {
var $select;
var defaultValue;
var scope = this;
this.init = function() {
$select = $(args.item[ args.column.field ]);
$select.appendTo(args.container);
$select.focus();
// Force the select to open upon user-activation
var element = $select[ 0 ];
if (document.createEvent) { // all browsers
var e = new MouseEvent("mousedown", {
bubbles: true,
cancelable: true,
view: window
});
element.dispatchEvent(e);
} else if (element.fireEvent) { // ie
element.fireEvent("onmousedown");
}
};
}
複合劑編輯器下拉HTML的輸入 - >下拉HTML輸出
function SelectCellEditor(args) {
var $select = $(args.item[ args.column.field ]);
var defaultValue;
var scope = this;
this.init = function() {
//$select
$select.appendTo(args.container);
// Force the select to open upon user-activation
var element = $select[ 0 ];
if (document.createEvent) { // all browsers
var e = new MouseEvent("mousedown", {
bubbles: true,
cancelable: true,
view: window
});
element.dispatchEvent(e);
} else if (element.fireEvent) { // ie
element.fireEvent("onmousedown");
}
$select.on("click", function(e) {
var selected = $(e.target).val();
$select.find("option").removeAttr("selected");
$select.find("option[value='" + selected + "']").attr("selected", "selected");
});
};
this.destroy = function() {
$select.remove();
};
this.focus = function() { };
this.loadValue = function (item) { };
this.serializeValue = function() { };
// Only runs if isValueChanged returns true
this.applyValue = function (item, state) {
item[ args.column.field ] = $select[ 0 ].outerHTML;
};
this.isValueChanged = function() {
return true;
};
this.validate = function() {
return {
valid: true,
msg: null
};
};
this.init();
}
- 1. 當選擇下拉列表
- 2. 選擇ajax下拉列表
- 3. CI下拉列表選擇
- 4. 選擇下拉列表html
- 5. jquerymobile:mutli選擇下拉列表
- 6. 選擇值從下拉列表下拉
- 7. 填充下拉列表/選擇列表
- 8. 基於選擇另一個下拉列表的下拉列表
- 9. 在選擇其他下拉列表時填充下拉列表
- 10. 發送選擇下拉列表到另一個選擇下拉列表
- 11. 點擊/完成選擇下拉列表,顯示更多選擇下拉列表
- 12. 簡單的SlickGrid DropDown選擇列表celleditor
- 13. 從下拉列表中選擇,第二個下拉列表中的選項
- 14. 選擇列表懸停下拉?
- 15. 自動選擇下拉列表的值
- 16. Radwindow在下拉列表中選擇indexchange
- 17. MVC2多選擇下拉列表
- 18. 選擇下拉列表替換
- 19. jquery更改選擇下拉列表
- 20. JavaScript下拉列表:選擇onClick
- 21. 錯誤在下拉列表中選擇
- 22. $ js在codeigniter中選擇下拉列表
- 23. WWW :: Mechanize-從下拉列表中選擇
- 24. 不可選擇的下拉列表
- 25. 修改下拉列表中的選擇
- 26. 允許的下拉列表/選擇值
- 27. Rational Functional Tester下拉列表選擇
- 28. 下拉列表選擇值禁用
- 29. 下拉列表選擇Excel VBA
- 30. 下拉列表中選擇動態
由於這是那種我一直在尋找的東西,你猜我將不得不修改和嘗試,在列中添加一些參數,以便您可以即時更改列。 與jqGrid對於選擇列表atm類似。 – Sam 2010-04-12 19:47:56