IE 11选择具有焦点失去焦点单击时(IE 11 Select with Focus Losing

2019-10-20 03:48发布

我正在做一个电子表格,双击单元格带来了“编辑”控制,给予其焦点,并设置了一个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;
};

Answer 1:

找到了解决办法。 原来这是所有输入/选择类型的节点都失去焦点,和正在发生的事情是,这是在一个表中的节点会,点击时,气泡从控制到表格单元格,然后将得到的焦点和原因事件模糊()来触发对内部控制。 解决的办法是挂钩事件处理程序的onclick,onmousedown事件和onmouseup(好措施)什么也不做,但preventDefault()方法和stopPropagation()。 一旦事件停止传播到包含表格单元格,一切工作,因为它应该。



Answer 2:

而不是调用焦点的使用的setTimeout()直接调用它,1至10毫秒的时间间隔应该足够了。



文章来源: IE 11 Select with Focus Losing Focus When Clicked