1

js 创建确认消息。我构建了一个网络应用程序,用户可以在其中更改图形的 2 个边界(使用更新按钮)。当用户单击更新按钮时,会出现一条确认消息并要求用户确认此更改。

问题是,当我单击“确定”或“取消”时,这并不重要,也不会更改标志,并且无论如何都会更改边界(因为标志的初始值是 true)。来自控制台的消息.log,我了解到该应用程序不会等待用户响应并继续执行其他代码行...我已尝试将所有代码放入我发送的 alertify 函数(e)中,但它仍然没有不适合我。这是我的代码:

Alarm.prototype.updateAlarm=function(_limits){
var n=null;
var str="";
var changed_flag=false;
//create confirm dialog:
var engLimitMsg_1=" Upper Limit:";
var engLimitMsg_2=" Lower Limit:";
var hebLimitMsg_1=" גבול עליון:";
var hebLimitMsg_2=" גבול תחתון:";
var user_confirm=true;
var confirmMSG="";
if(_limits.length>=2){
    if(this.language_mode==HEB_MODE){
        confirmMSG+=ENG_CONFIRM_MSG;
        if(IsNumeric(parseInt(_limits[0]))){
            confirmMSG+=engLimitMsg_1+_limits[0];
        }
        if(IsNumeric(parseInt(_limits[1]))){
            confirmMSG+=engLimitMsg_2+_limits[1];

        }
    }
    else{
        confirmMSG+=ENG_CONFIRM_MSG;
        if(IsNumeric(parseInt(_limits[0]))){
            confirmMSG+=engLimitMsg_1+_limits[0];
        }
        if(IsNumeric(parseInt(_limits[1]))){
            confirmMSG+=engLimitMsg_2+_limits[1];

        }

    }

    alertify.confirm(confirmMSG, function (e) {
        if (e) {
            // user clicked "ok"
            user_confirm=true;
            console.log("user clicked ok");

        } else {
            // user clicked "cancel"
            user_confirm=false;
            console.log("user clicked cancel");

        }
    });
     //user has confirm the change!
    if(user_confirm){
        for (var i=0;i<_limits.length;i++){
            if(IsNumeric(parseInt(_limits[i]))){
                n=this.msgs[i].indexOf(this.limits[i].toString());
                this.limits[i]=_limits[i];
                this.msgs[i]=this.msgs[i].slice(0,n)+this.limits[i];
                changed_flag=true;
            }
        }
    }
    // clean past alerts in case of change limits.
    if(changed_flag)
        this.cleanPastAlerts();
    if(DEBUG_MODE)
        console.log("alarms update: upperLimit:"+this.limits[0]+" lowerLimit:"+this.limits[1]);

}
else{
    console.log("Error occurred!, array length is less than 2");
}

};

注意:这是我有时会遇到的错误:

Uncaught TypeError: Cannot read property 'removeEventListener' of undefined 
4

2 回答 2

1

你可以使用 JavaScript 的内置确认消息框吗?如果是这样,那就很简单了。

if (confirm("Press OK to accept"))
    alert("You accepted!");
else
    alert("You declined!");
于 2013-12-31T12:13:26.967 回答
1

浏览器中 js 的 js 确认会停止 js 的执行。当您使用“自定义确认”(一个 js 库确认)时,“自定义确认”下方的代码会继续执行,这就是您在那里获取消息的原因,因为它一直在执行并且您在函数内部定义了变量,当 js 尝试使用它们时,它会显示“未定义的变量”。

您必须在 alertfy 中插入所有代码以确保它正常工作(我没有检查下面的代码,所以,请谨慎使用):

alertify.confirm(confirmMSG, function (e) {
    if (e) {
        // user clicked "ok"
        user_confirm=true;
        console.log("user clicked ok");

        for (var i=0;i<_limits.length;i++){
          if(IsNumeric(parseInt(_limits[i]))){
            n=this.msgs[i].indexOf(this.limits[i].toString());
            this.limits[i]=_limits[i];
            this.msgs[i]=this.msgs[i].slice(0,n)+this.limits[i];
            changed_flag=true;
        }
        // clean past alerts in case of change limits.
        if(changed_flag) {
          this.cleanPastAlerts();
        }
      }
    } else {
        // user clicked "cancel"
        user_confirm=false;
        console.log("user clicked cancel");

    }
});
if(DEBUG_MODE)
    console.log("alarms update: upperLimit:"+this.limits[0]+" lowerLimit:"+this.limits[1]);
于 2013-12-31T12:20:42.017 回答