【问题标题】:Errors with manual hiding twitter bootstrap tooltips with HTML5 <object> elements使用 HTML5 <object> 元素手动隐藏 twitter 引导工具提示的错误
【发布时间】:2013-06-16 10:12:53
【问题描述】:

对于我的第一个 JavaScript 应用程序,我正在构建一个基于小部件的设计器,并使用各种基于 SVG 的小部件,这些小部件包含在带有对象标签的 HTML 主体中。当用户单击小部件对象时,我试图关联引导工具提示,但是在其他非对象 HTML 元素上使用工具提示时,我遇到了奇怪的错误。

由于对象标签会吞下鼠标事件,因此无法通过悬停触发工具提示,我可以开始工作以显示工具提示的唯一组合是以下代码(没有其他工作,引导程序抱怨):

document.getElementById(widgetName).setAttribute("title", param0);
setTimeout(function () {
     $("#" + widgetName).tooltip("show");
     }, 1);              // attribute needs to be set after the next tick so the DOM is refreshed.
setTimeout(function () { $("#" + widgetName).tooltip("hide"); }, 2000); // 2 sec delay before hiding

此代码显示工具提示,但在 2 秒超时以隐藏工具提示后,无法在 IE10 中获取未定义或空引用的属性“originalTitle”。我不能使用工具提示对象选项(例如延迟选项),因为我得到了同样的错误。 Chrome 中同样的问题,虽然 Chrome 没有报告错误(虽然没有隐藏)。

我确信这与尝试在对象标签上使用工具提示有关,因为工具提示在其他情况下正常工作。但是,我对 JavaScript 还很陌生,所以如果我在做一些愚蠢的事情,请告诉我,而且 bootstrap/Jquery 代码太复杂,我无法追踪错误。

使用:HTML5、IE10、最新的 twitter bootstrap、visual studio 2012 web

感谢任何帮助/指点。

更新:添加了将对象插入 DOM 的代码

    var objWidget = document.createElement("object");
    objWidget.type = "image/svg+xml";
    objWidget.data = "widgets/" + widgetFile + "." + widgetExt      // location of widget
    objWidget.className = "widget"
    var widgetName = "objWidget" + widgetNum;
    targetDiv = "widgetContainer"
    objWidget.id = widgetName;
    document.getElementById(targetDiv).appendChild(objWidget);   // Add to Div
    var objID = document.getElementById(widgetName);
    objID.addEventListener("load", function () {      // access properties once the file is loaded
        var objDoc = objID.contentDocument;
        objDoc.addEventListener("dragstart", drag_start, false);
        objDoc.addEventListener("dragover", drag_over, false)
        objDoc.addEventListener("drop", drop, false)
        objDoc.getElementById("widget").setAttribute("data-widgetName", widgetName);   // set a data attribute on the SVG that points to the parent object as object that created the event isn't recorded in the event.currentTarget
        objID.setAttribute("draggable", "true")
        objID.style.setProperty("position", "absolute");
        objID.style.setProperty("left", objLeft + "px");
        objID.style.setProperty("top", objTop + "px");
        objID.style.setProperty("z-index", widgets[widgetNum].zOrder);
        objDoc.defaultView.loaded(widgetName);         // run widget startup routine only if it isn't a new widget
        objDoc.defaultView.addEventListener("click", widgetClick, false);
        objDoc.defaultView.addEventListener("dblclick", widgetDblClick, false);
    }, false);

【问题讨论】:

  • 您的示例代码没有显示originalTitle的使用?
  • Bass,如果我将原始标题添加到属性中(它实际上需要数据原始标题),我什至无法让“显示”工作(同样的错误)。任何想法为什么引导工具提示会在对象元素上导致此问题?
  • 我测试您的代码(将工具提示添加到 svg 标签)请参阅:bootply.com/64598 FF 和 chrome 没有问题,所以 ie10 可能会导致此错误?另见:stackoverflow.com/questions/14697232/…
  • 嗨,Bass,感谢您设置 bootply。这在 IE10 中有效,但是我的问题是 SVG 作为对象元素(来自外部 SVG 文件)插入 DOM,而不是作为内联 SVG。
  • 你能添加一些插入 DOM 的示例代码吗?也许你的超时是在创建之前触发的?

标签: javascript html object twitter-bootstrap


【解决方案1】:

我测试您的代码(将工具提示添加到 svg 标签)请参阅:http://bootply.com/64598 FF 和 chrome 没有问题

【讨论】:

  • 是的,我认为在我重建我的网站并且它现在可以工作时,我在引导程序的版本控制方面遇到了问题。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-25
相关资源
最近更新 更多