单击数据表中的第二个单元格(任何行)会导致单元格编辑器显示。但是,我试图从代码中显示单元格编辑器。代码如下所示:
var firstEl = oDataTable.getFirstTdEl(rowIndex);
var secondCell = oDataTable.getNextTdEl(firstEl);
oDataTable.showCellEditor(secondCell);
当我调试到datatable.js代码时(通过单击或上面的代码),它通过showCellEditor函数遵循相同的路径,但上面的代码不会显示编辑器。
我正在使用YUI版本2.8.0r4。
答案 0 :(得分:0)
我认为这是模糊事件问题。
因此,例如,我有必须将记录添加到datatable的链接,并显示其编辑器。
var mymethod = function (e) {
YAHOO.util.Event.stopEvent(e);
var r = {};
r.id = 0;
r.value = 'hello world';
myDataTable.addRow(r);
var cell = myDataTable.getLastTrEl().cells[0];
myDataTable.showCellEditor(cell);
}
YAHOO.util.Event.addListener('mylink2addrecord_ID', 'click', mymethod);
如果没有stopEvent,你将永远不会看到编辑器,因为当你点击链接时会调用tableBlur事件....
答案 1 :(得分:0)
正如mac所说,你需要停止上一个事件。由于某种原因,它(tableBlur事件)与showCellEditor函数冲突。这是第一个解决问题的地方。
总结一下,我所做的只是:
YAHOO.util.Event.stopEvent(window.event);<br/>
dt.showCellEditor(td); // dt = yui datatable obj, td = {record: yuirecord, column: yuicolumn}
当然,如果你的事件对象随时可用,就像mac的帖子一样,你可以像他那样将它传递给stopEvent(e)。
答案 2 :(得分:0)
你可以试试这个 - 这只是我所拥有的一大段事件处理程序代码的片段。 EditNext是在单元格上移动并显示编辑器的函数(如果单元格有一个:
) this.myDataTable.subscribe("editorKeydownEvent",function(oArgs) {
var self = this,
ed = this._oCellEditor, // Should be: oArgs.editor, see: http://yuilibrary.com/projects/yui2/ticket/2513909
ev = oArgs.event,
KEY = YAHOO.util.KeyListener.KEY,
Textbox = YAHOO.widget.TextboxCellEditor,
Textarea = YAHOO.widget.TextareaCellEditor,
DCE = YAHOO.widget.DateCellEditor,
cell = ed.getTdEl(),
col = ed.getColumn(),
row,rec,
editNext = function(cell) {
cell = self.getNextTdEl(cell);
while (cell && !self.getColumn(cell).editor) {
cell = self.getNextTdEl(cell);
}
if (cell) {
self.showCellEditor(cell);
}
},