Wenn Ihre Zelle bereits einen „Kopie“ -tag mit mehreren Optionen enthält, können Sie diesen hTML aus dem args extrahieren. Der Ansatz unterscheidet sich von den vorherigen Antworten, aber ich hatte persönlich Probleme mit diesen Lösungen, natürlich enthielt meine Zelle bereits ein Auswahl-Tag. Ich möchte diese Zelle wiederverwenden, anstatt sie vollständig in der this.init
zu rekonstruieren. Ebenso würde ich gerne behalten die gleichen Optionen verwenden, wie meine bestehenden Auswahl bereits, anstatt sie auf die var column = { ...
Parsen Die $(args.item[ args.column.field ])
geben die aktiven Zellen Inhalte, die im Grunde nur wieder angehängt bekommen auf die der container
(das Zellobjekt). Von if (document.createEvent)
und nach unten, ist nur eine Funktion, die das Dropdown-Menü bei Aktivierung automatisch öffnet; usw., wenn Sie Tabulator verwenden, um zu der Zelle zu navigieren.
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");
}
};
}
Complet-Editor für Dropdown html-Eingang -> Dropdown html-Ausgabe
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();
}
Dank, dass die Art von Sache, die ich suchte, denke, ich werde es ändern müssen und versuchen, Fügen Sie den Spalten einen Parameter hinzu, damit Sie die Spalten im laufenden Betrieb ändern können. Ähnlich wie bei jqGrid für ausgewählte Listen atm. – Sam