【问题标题】:Image resize handles in IE's contenteditable modeIE 的 contenteditable 模式下的图像大小调整句柄
【发布时间】:2010-04-27 18:14:41
【问题描述】:

如何在 IE 7+ 的 contenteditable 模式下选择性地关闭图像大小调整句柄?我尝试将图像的 contentEditable 设置为 false 并将其 onresizestart 设置为“return false”,但无济于事。

我正在使用 tinyMCE。

【问题讨论】:

  • 可能相关(但不是我一开始想的完全骗局)stackoverflow.com/questions/1926525/…
  • 是的,仅指 FireFox。
  • 图像是否仍需要可更改并且通常表现得像图像?
  • Teemu 的回答对我有用

标签: javascript internet-explorer


【解决方案1】:

为您的图像设置unselectable="on"。适用于较旧的 IE,但最近已弃用。

【讨论】:

  • $('
    ',{'unselectable':'on'});这应该与
    在资源管理器中为我工作 相同
  • 这……对我有用吗?它使图像无法调整大小,但加载页面后的第一次单击仍会显示调整大小句柄,并阻止单击事件的正确功能。如果我然后在图像外部单击,则调整大小的句柄将被清除 - 但只有当我不单击另一个图像时,句柄才会出现在它们首先出现的图像上!这让我有些困惑。我使用 jQuery。
  • @GertSønderby 看起来 unselectable 在 IE10 中已被弃用,也许 9 也已弃用。无论如何,它不在文档中,但我记得这需要设置为属性,设置属性不起作用。
  • @Teemu,感谢这个解决方案。然而,关于它有一个问题。当您设置unselectable -> on 时,它会生成element unresizeable。手柄在第一次单击时可见,但如果再次单击该元素,它们将不会出现。问题是,不能在contenteditable 区域内拖放元素。有没有办法在 IE 中也可以使用 draggable附注: - > 如果IE11 是通过setAttribute 设置的,unselectable 甚至可以在IE11 中工作 -> element.setAttribute('unselectable','on')
  • @W.D.当unselectable 设置为一个元素时,它应该是不可选择的,因此也不可能使其可拖动。我无法重现 IE11 中的首次点击问题,尽管已弃用的属性可能表现异常。
【解决方案2】:

我在 tinyMCE 中使用 advimagescale 插件来阻止所有图像的大小调整。 但是,我发现它阻止了图像被拖放到编辑器实例中。

我发现我可以使用以下方法去除 mouseup 上的尺寸属性:

setup : function(ed) {
    ed.onMouseUp.add(function(ed, e) {
        if (e.target.nodeName == "IMG") {
            e.target.removeAttribute("width"); 
            e.target.removeAttribute("height"); 
        }
    });
}

不过,我非常想摆脱那些该死的把手。

【讨论】:

    【解决方案3】:

    这很痛苦,需要时间和运气才能找到:您希望 'controlselect' 事件删除 IE 中的调整大小句柄。

    element.oncontrolselect = function () { return false; };
    

    上面的代码行对我有用(警告:不使用 TinyMCE,但是,这似乎是一个 contentEditable 头痛,而不是特定的 TinyMCE)。你需要在任何你不想拥有这些拖动句柄的元素上设置这个处理程序(在我的例子中是图像)。

    【讨论】:

    • 从 IE11 开始,此方法不再有效 - 而且似乎也没有其他方法。
    • @Gert 什么版本的 windows?它适用于 8.0 和 8.1
    • 我当时使用的是 8.1,来自modern.ie。我承认,从那以后我没有检查过这个,假设 A) 事情很糟糕,B) 他们不会被修复 - 但我准备好感到惊讶。 :-)
    • 我在 Win7 / IE11 上看到了同样的情况——没有触发 controlselect 事件,而且丑陋的盒子仍然存在。
    • 嗯......也许 Edge 会有一些东西?
    【解决方案4】:

    您可以通过定义行为文件来禁用句柄的功能。我找不到任何能让你隐藏把手的东西。下面代码的结果是拖动手柄没有效果。

    noresize.htc:

    <public:component lightweight="true">
    
        <script language="javascript">
    
        function CancelEvent()
        {
                return false ;
        }
    
    this.onresizestart = CancelEvent ;
    this.onbeforeeditfocus = CancelEvent ;
    
    </script>
    
    </public:component>
    

    然后在css中:

    img.noresize {
        behaviour:url(/css/noresize.htc);
    }
    

    请注意,您需要正确设置该 url() 路径。将 css 类添加到要选择性禁用的图像中。

    这篇文章有一个对我不起作用的替代 .htc 文件:

    http://nickw101.wordpress.com/2011/02/25/disabling-image-resizing-in-ie-contenteditable-elements/

    【讨论】:

    • (不幸的是,自 IE11 以来,这已停止工作。)
    【解决方案5】:

    有史以来最好的修复:

    <div contenteditable="true">
        <label contenteditable="false"><input/></label>
    </div>
    

    或任何包装你的输入/img的html元素

    在带有 img 的 IE11 上也能像魅力一样工作。

    【讨论】:

      【解决方案6】:

      通常您不希望任何元素的调整大小功能都可以访问。您可以设置 contenteditable containeronresizestart 处理程序,以便取消任何调整大小。 那就是:

      <div id="editor" contenteditable="true" onresizestart="return false;">
          <img src="..." />
      </div>
      

      或者用JS:

      var editor = document.getElementById('editor');
      editor.onresizestart=function(){return false;}
      

      这不会隐藏句柄,但用户将无法调整元素的大小,无论它是什么类型。

      希望这会有所帮助!

      【讨论】:

      • onresizestart="return false;"在 IE 11 中不起作用
      猜你喜欢
      相关资源
      最近更新 更多
      热门标签