我正在做一个电子表格,双击单元格带来了“编辑”控制,给予其焦点,并设置了一个onblur事件处理程序来隐藏“编辑”的控制和设置单元格的值是的控制,一旦失去焦点。 假定流是用户双击以调出编辑控制,选择/输入值,然后点击/选项卡以别的东西,从而移动聚焦到另一元件和触发编辑控件的的onblur处理程序。
它工作得很好,但在IE 10和11(Chrome和FF做工精细)选择标签:我每次点击克拉下降下拉,在SELECT失去焦点并触发的onblur处理程序,然后隐藏编辑控件,从而阻止我编辑的值。
没有人知道为什么这种情况正在发生或如何解决呢?
我发现这个博客帖子描述的问题,提出增加一个背景图像的选择的解决方案,但似乎并没有解决这个问题(或者我没有错)。
下面是我生成和插入的HTML编辑器插入细胞的代码。
/**Changes the contents of the cell to be its editing control instead of plain text.
@method SetCellEditMode
@param {String} mappingId: The Id of the PropertyMapping representing cell to switch over to edit mode.*/
this.SetCellEditMode = function (mappingId)
{
if (this.Editing === true) return false;
var cell = this.GetCell(mappingId);
var tagType = null;
if (cell == null) return false;
var propInfo = cell.SourceObject.PropertyInfo;
if (propInfo.IsReadOnly === true) return false;
var innerHtml = null;
if (propInfo.PropertyType === SDCMS.Resources.PropertyType.Boolean)
{
innerHtml = makeBoolHTML(cell.SourceObject);
}
else if (propInfo.PropertyType === SDCMS.Resources.PropertyType.Enum)
{
innerHtml = makeEnumHTML(cell.SourceObject);
}
else if (propInfo.PropertyType === SDCMS.Resources.PropertyType.Number || propInfo.PropertyType === SDCMS.Resources.PropertyType.String)
{
innerHtml = makeStringEntryHTML(cell.SourceObject);
}
cell.Node[0].innerText = "";
cell.Node.html(innerHtml);
cell.Node[0].firstChild.focus();
this.Editing = true;
return true;
};
/**Makes the HTML for a boolean <select> control.
@method makeBoolHTML
@param {Object} propertyMapping: The SDCMS.Resources.PropertyMapping for which we are making an <select> control.*/
var makeBoolHTML = function (propertyMapping)
{
if (propertyMapping == null) return null;
var innerHtml = "<select mappingId=\"" + propertyMapping.Id + "\" onblur=\"SD_Click(event, 'SD_ChangeValue')\">" +
"<option>true</option>" +
"<option>false</option>" +
"</select>";
if (propertyMapping.PropertyValue === true)
{
innerHtml.replace("<option>true</option>", "<option selected=\"selected\">true</option>")
}
else
{
innerHtml.replace("<option>false</option>", "<option selected=\"selected\">false</option>")
}
return innerHtml;
};