ygs88
ygs88
  • 发布:2015-05-25 17:45
  • 更新:2015-05-25 17:50
  • 阅读:2533

switch开关问题

分类:MUI
mui('.mui-switch').each(function() {  
                var _this = this;  
                mui(_this).switch();  
                _this.addEventListener("toggle", function(event) {  
                    var id = _this.getAttribute("title");  
                    if (event.detail.isActive) {  
                        openOrClose(0, id, _this);  
                        event.detail.isActive =0;  
                    } else {  
                        openOrClose(1, id, _this);  
                        event.detail.isActive =1;  
                    }  
                });  
            });

给switch一个监听,开启关闭操作触发后面的操作,当开启失败或者关闭失败,如何让按钮回到初始状态,用@DCloud_MUI_FXY 给提供的方式

mui('.mui-content .mui-switch')['switch']();

是可以达到效果,但是又再一次的触发了上面的监听,这样就是一个死循环,请问有没有什么解决办法?

2015-05-25 17:45 负责人:无 分享
已邀请:
DCloud_UNI_FXY

DCloud_UNI_FXY

var isManual = true;  
document.getElementById("mySwitch").addEventListener('toggle', function(event) {  
if (isManual) {  
var failed = true //业务逻辑   
if (failed) {  
isManual = false;  
var self = this;  
setTimeout(function() {  
mui(self)['switch']().toggle();  
}, 200);  
}  
} else {  
isManual = true;  
}  
});
  • ygs88 (作者)

    我的业务用的Ajax异步,这个isManual全局参数一直是true,我异步采用async: false,也没用!

    2015-05-25 18:28

  • DCloud_UNI_FXY

    我的代码只是让你参考。如果是ajax异步。那你应该在异步完成后,先设置isManual=false,然后调用mui(self)['switch']().toggle();

    2015-05-25 18:39

  • ygs88 (作者)

    已解决,全局变量在这里由于异步,会失去意义,我采用的是plus.storage.setItem("isManual", "true"); 谢谢!

    2015-05-25 19:04

  • DCloud_UNI_FXY

    全局变量在这里由于异步,会失去意义。啥意思?你有多个switch?多个的话,把isManual设置给当前switch就行了。var self = this;if(self.isManual!==false){....self.isManual=false;....}else{self.isManual=true}

    2015-05-25 19:29

该问题目前已经被锁定, 无法添加新回复