解决eazyui的dialog缓存问题,destroy等都是无效的

eazyui的dialog缓存问题这个是分情况的,普通一般情况下,在打开dialog窗口前先将input等内容清空或是设置上相应的值。destroy方法是销毁,会导致dialog无法打开。close是关闭显示,注意关闭的是显示,不是正真的dialog窗口。在有些特殊情况下以上方法全部无效。其实也可以说是这就是eazyui的一个bug吧。举个例子啊,看几张实际项目中的图片解决eazyui的dialog缓存问题,destroy等都是无效的_第1张图片

这是个普通的页面,上面有个分润规则的按钮,点击按钮后又弹出个页面,且页面有列表和按钮。这个页面是以dialog弹出框的形式弹出来的,注意问题(eazyui的bug)就出在这里。

看上图就是点击按钮弹出的dialog窗口页面,里面又有按钮,点击按钮会再次弹出相应的dialog窗口页面,比如新增按钮:

解决eazyui的dialog缓存问题,destroy等都是无效的_第2张图片

看这张图,我们我们可以看到一个页面,2个dialog弹窗,最外面的这个有着需要页面初始化去加载的js方法,收费类型是可选择的,根据选择不同的类型,下面空白的地方会显示不同的表单供填写,第一次打开分润列表,在不关闭分润列表的前提下,任何操作都是没问题的。在第一次关闭分润列表,再次打开分润列表,在首次点击添加时,会发现整个添加分润规则dialog页面的js或是html都有着问题,比如交易类型明明选择了依旧时空值,初始化js代码是执行了,但是无效,把新增页面关掉,再次打开又一切都正常了。

dialog缓存的问题导致,新打开的dialog窗口页面中html元素可能存在异常,js代码执行但是无效,只有$(this).val(),类似于this的操作才可以获取到下拉框中值,然后再赋值给下拉框,是不是很崩溃啊?下拉框都有值我都选择了,但是却是空的。。。好气人

在解决这个问题的时候,我尝试了所有的方式,全都不可取。最后使用一个不太推荐但是确实实用的方法就是:

//弹窗增加
 function savePro() {
        d=$("#dlgpr").dialog({
            title: '添加分润规则',

   ................................................

这个dialog定义了一个变量d,我在将这个.dialog({初始化方法又复制了一遍的时候发现,上诉问题不存在了,但是又出现了新的问题,第二次打开列表页面点首次击新增按钮时会出现两个dialog页面,且会明显的发现有个页面你点击取消按钮页面不关闭,对这个页面就是之前出现问题的页面。

然后我在第一遍执行  d=$("#dlgpr").dialog({....方法后,又想着再次关闭dialog,写了dialog的close方法,但是依旧无效,因为元素压根就不存在,用id去close是失败的,因为有着缓存,然后就使用了这个变量d去操作关闭,d.panel('close');就和取消时的方法是一样的{
                text:'取消',
                handler:function(){
                        d.panel('close');
                    }
            }]
        });

d.panel('close');

下面再次初始化一下

  d=$("#dlgpr").dialog({
            title: '添加分润规则',

这样才解决了这个问题,我知道这个方法不是很好,但是很实用啊。之前尝试过,但是因为缓存的问题,写很多的js都是无效的,只有this操作有用,所以我几乎都无法去修改页面的值,只能试着去清楚缓存,最后通过重新再次加载的方式解决了上诉问题,有和我遇见相同情况的朋友们,可以试试其他方式,可以的话给我评论留言,谢谢啦。




你可能感兴趣的:(js技术)