$('.layui-laypage-btn').click();没有反应!!!

提问 已结
20 434
抱明月而长终
悬赏:20飞吻
版本:layui 2.2.4 浏览器:chrome
@贤心 @岁月小偷
想实现,提交数据后关闭iframe层,刷新本页面(而不跳到第一页)的效果。
社区大多人使用的都是使用 $('.layui-laypage-btn').click(); 或者 $('.layui-laypage-btn')[0].click(); 实现的效果。
理论上来说,数据提交后,关闭iframe层,再加上这句,点击到前页的按钮是可以使可以实现 我想要的效果的。即,提交数据后保持在本页面刷新数据。
但是我在数据提交后,调用这句并没有效果。能帮我分析一下是什么原因吗?
望广大社区伙伴能帮助我解决这个问题!!!
回帖
  • 你应该是在 弹出层销毁回调中写才对,
    layer.open({
    type: 2,
    title: 'layer mobile页',
    shadeClose: true,
    shade: 0.8,
    area: ['380px', '90%'],
    content: 'mobile/',
    end:function(){
    $('.layui-laypage-btn').click();//模拟点击
    }
    });
    0 回复
  • //监听提交,发送请求
    form.on('submit(add)', function(data){
    $.post("<%=basePath%>addLocation.do",data.field,function(data){
    if(data.code==200){
    layer.msg(data.message, {
    icon: 6,time: 500
    },function () {
    //当你在iframe页面关闭自身时
    var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
    parent.layer.close(index); //再执行关闭
    //$('.layui-laypage-btn')[0].click();
    $('.layui-laypage-btn').click();
    });
    }else {
    layer.msg(data.message, {
    icon: 5,time: 500});
    }
    });
    return false;
    });
    0 回复
  • 实际上parent.layer.close(index); 关闭了页面之后的代码有没有执行是个问题,你可以试一下,但是我觉得最要的问题在于在子页面$(‘.layui-laypage-btn’)这一句是找不到父页面的按钮的额,调试一下看看,能找到不,我觉得应该是用父页面的window.$去找才能找到,不知道我理解的对不对,因为基本不用iframe;然后假使能找到,其实也不建议用这种方式去刷新,如果一开始没有数据是没有分页组件的,也就是说找不到这个按钮,还是直接table.reload()吧,但是你的版本比较尴尬,我印象中是2.2.5还是2.2.6才改的默认刷新本页面的,要重新回到第一页需要制定curr:1,在之前的版本得看看源码支持不支持reload的时候把当前的curr给带过去然后刷新本页面,还是以前的版本都会限定只能到首页这个得看看源码的支持了,建议考虑要不要升级一下版本,如果不升级的话就看看前面说的是不是要把reload提前然后再close,还有$是不是应该是父页面的jquery才能找到父页面的节点,然后如果改用reload的话就得看看是不是支持reload制定页了。
    还有一个小秘密[偷笑] 在帖子正文@ 某人 对方是收不到推送的,得在回复中@ 才行好像
    0 回复
  • @岁月小偷 主要是我上次叫你改过layui.js源码 我也改过一些样式的源码,如果换版本的话...... 有点尴尬啊 哈哈
    0 回复
  • @抱明月而长终 每次修改源码要记得自己记录一下哪里修改了哈,后面更新才好一个个更新上去,这个效率可能有点低,后面应该考虑一下再github上fork一个然后再上面修改源码,有新版本的话就合并进来这样子估计会更加好一点[偷笑]
    0 回复
  • @flyer373 感谢兄台。
    0 回复
  • @岁月小偷 好尴尬啊,我发现我现在做的两个项目一个是2.2.4一个2.2.3
    通过表格重载这种方式,比如删除数据后回调这个是没问题的,但是在添加或者更新数据有iframe层时,表格重载回调就不好使了。可能也有版本的原因,所以我才采纳这种,调用点击当前页这种方式,实现刷新的效果。
    不过刚刚那位兄台给出的建议是在end()中,回调。问题已经得到解决!我想添加数据后,表格重载不生效,也可以放在end函数里实现重载表格。我就不去试验了,毕竟我是java[生病]
    还有感谢你的友情提醒!!嘻嘻
    0 回复
  • @抱明月而长终 嗯嗯,本来也跟你说在end回调reload的,但是以为你要的是只有保存发交易成功了才刷新,没有的话直接关闭或者失败都不刷新[偷笑] ,就没提这茬了
    0 回复
  • 但是通过end()函数回调 $('.layui-laypage-btn').click();//模拟点击 也存在缺陷,效果算实现了。但是无形的给服务器加压了,对于访问量很小的网站来说这样处理无伤大雅,但是如果操作流量较大的话,就会给给服务器增加部分压力
    0 回复
  • 下面还有一个问题想请教一下两位!

    主页面中我点击添加按钮(或者编辑按钮)弹出相应的页面(iframe层)后,再按下键盘的Enter键,就会一直无限发送请求,直到松开Enter键为止。 最开始是按下Enter无限弹出层,后通过在open()函数中给每一个设置id,解决按下Enter键无限弹出层的问题。但是还是会继续发送请求,这个应该是鼠标点击父页面的按钮后,父页面鼠标的焦点没有丢失造成的吧?? 这个问题应该怎么解决呢?在不取消键盘事件的前提下。
    0 回复
  • 0 回复
  • @岁月小偷 对 理应是对数据操作成功之后,才刷新表格。在end里使用有点粗暴,不太合理。我再研究一下在数据提交成功后刷新的效果,也希望你能再指点我一下
    0 回复
  • @抱明月而长终 这个回车的感觉应该是form表单里面的问题,input有键盘监听,如果一直按着回车键的话估计就变成你看到的情况,你可以弹出一个普通的页面,或者有form表单但是不要让input获得焦点,然后按住回车,好像这种情况下就不会。
    0 回复
  • @岁月小偷 不不不,我这个问题和form表单无关。可能是我描述的不够清楚。
    按下回车键请求的是 和 $('.layui-laypage-btn').click(); 请求的一样的 就是相当于无限刷新父页面
    0 回复
  • @岁月小偷 我想实现在数据提交成功后刷新的效果已经实现,按你的说法使用window.$ 的思路。我的父页面不是在window 我用用parent.$已实现目的。 感谢你哈!!嘻嘻[可爱] 可以重新采纳吗 [太开心]
    0 回复
  • @抱明月而长终 嗯,那关键问题我觉得就是找到是谁监听了这个回车的事件,然后又在这个事件里面做了什么操作。目前我找了一下layer没有添加这个监听,form表单里面有就是上面我说的那个情况,其他的组件要看你都用了什么组件了,还有就是自己写了这个回车的监听了没。
    0 回复
  • @抱明月而长终 [偷笑] 能解决问题就好了哈,采纳谁的没关系啦[嘻嘻]
    0 回复
  • 在你的click事件开始中写上,$(this).blur();试试
    0 回复
  • @岁月小偷 我测试了一下 如果我屏蔽这一段代码就不会发生按下ENTER键 无限发送请求的情况

    $('.select .layui-btn').on('click', function () {
    var type = $(this).data('type');
    active[type] ? active[type].call(this) : '';
    });

    我都不知道这块代码是干嘛的....
    在他的上面也有一句和他比较类似的代码:区别在于$('.layui-col-md12 .layui-btn').on。。。
    0 回复
  • @抱明月而长终
    $('.select .layui-btn').on('click', function () {
    var type = $(this).data('type');
    active[type] ? active[type].call(this) : '';
    });
    我把这段代码屏蔽了 这个无限请求的问题似乎解决了
    0 回复