FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
查看: 14928|回复: 15
打印 上一主题 下一主题

IE7下弹出窗口出现滚动条时Alert出现JS错误

[复制链接]
跳转到指定楼层
楼主
发表于 2012-3-30 16:37:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在IE7下,弹出一个ext window窗口,window窗口里的页面如果高度超过了window的高度时,window会自动出现滚动条。出现滚动条后 就会引发一些问题。比如 ext button不响应,alert报JS错误。其中以alert报错最为要命,因为找不到其他替代方案。我研究了好久好久也没找到解决办法。希望三石先生关注一下。谢谢
沙发
发表于 2012-3-30 16:43:27 | 只看该作者
贴出代码嘛,暂时没遇到过这样的问题
板凳
 楼主| 发表于 2012-3-30 16:47:21 | 只看该作者

<ext:Button ID="Button1" runat="server" Text="点击此按钮弹出一个带滚动条的window" OnClick="Button1_Click">
    </ext:Button>
    <br />

<ext:Window ID="EditTaskWin" Title="测试window里滚动条" Hidden="true" EnableIFrame="true" runat="server"
        IsModal="true" Width="800px" Height="600px" EnableClose="true" EnableMaximize="true"
        Target="arent" WindowPosition="Center" >
    </ext:Window>

下面是弹出窗口页面
<body>
    <form id="form1" runat="server">
    <extageManager ID="ageManager1" runat="server" />
    <div style="height:800px;">
       <ext:Button ID="btnTest" Text="点击此按钮查看alert是否报错" runat="server"
            onclick="btnTest_Click"></ext:Button>
    </div>
    </form>
</body>
    public partial class TestWindow : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnTest_Click(object sender, EventArgs e)
        {
            ExtAspNet.Alert.Show("出现滚动条后,出错了吗?");
        }
    }
地板
发表于 2012-3-30 16:58:50 | 只看该作者
没出错呀~~
5#
 楼主| 发表于 2012-3-30 17:06:48 | 只看该作者
IE6 IE9 没问题,IE7有问题,很多网友都已经测试确认了这个问题了
6#
发表于 2012-3-30 17:52:31 | 只看该作者
这是 泗水亭长 给我的测试例子:

这个问题在IE7下的确存在。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
7#
发表于 2012-3-30 17:56:42 | 只看该作者
这个问题在Firefox,IE8,IE9下都不存在,只在IE7下存在,重新步骤:
1. 打开测试页面,单击按钮弹出窗口。
2. 确保弹出窗口出现滚动条,点击显示Alert对话框的按钮。
3. 弹出Alert对话框,此时还没问题。
4. 点击Alert对话框的标题,就报错了。



打开extjs源代码,定位到如下片段:


调试后发现,在IE7下,进来的node参数可能为null,所以在null.nodeName时自然会出错。


=====================================
其实解决办法很简单,当node不存在时不要往下执行函数了。

这个函数的本意是判断某个节点是否是有效的可拖动DOM节点,node为空时肯定就不是了,所以逻辑上也是对的。

所以,我们可以简单的修改extjs的源代码来解决这个问题:
  1. isValidHandleChild: function(node) {
  2. if(!node){ return false; }
  3. ....
复制代码

=====================================
但是上面的做法不太好,尽量不要修改别人的源代码,否则升级时会遇到问题。
没关系,我们只需在外面覆盖这个函数:
  1. // 修正IE7下,窗口出现滚动条时,点击Window控件标题栏有时node为null的问题
  2. var originalIsValidHandleChild = Ext.dd.DragDrop.prototype.isValidHandleChild;
  3. Ext.dd.DragDrop.prototype.isValidHandleChild = function (node) {
  4.     if (!node || !node.nodeName) {
  5.         return false;
  6.     }
  7.     return originalIsValidHandleChild.apply(this, [node]);
  8. };
复制代码

解决!



=====================
这个修正会出现在 v3.1.1中,如果你在使用以前的版本,可以下载ExtAspNet的源代码,把上面的一段JS代码加在js/x.js的最后,重新编译工程就行了。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
8#
发表于 2012-3-30 18:06:01 | 只看该作者
@泗水亭长,方便把你们项目放点截图到《基于 ExtAspNet 的项目展示区》。。。
9#
 楼主| 发表于 2012-3-30 19:20:48 | 只看该作者
好的,我想请问一个问题:
我之前调试虽然也定位到了出错的地方,但为什么我看到的JS代码显示为一行,没有任何格式,可读性非常不好。为什么您截图的出错代码页面是有格式的呢?
10#
发表于 2012-3-30 19:51:10 来自手机 | 只看该作者
我找extjs的没压缩源代码调试,不过一般不需要这样,extjs本身出现bug的情况还比较少
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-11-23 11:59 , Processed in 0.048234 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表