Выбор подтверждающего сообщения игнорируется

js для создания подтверждающих сообщений. Я создаю веб-приложение, в котором пользователь может изменить 2 границы графика (используя кнопку обновления). Когда пользователь нажимает кнопку обновления, появляется подтверждающее сообщение, и пользователю предлагается подтвердить это изменение.

Проблема в том, что когда я нажимаю «ОК» или «Отмена», это не имеет значения и не меняет флаг, и изменение границ происходит в любом случае (поскольку значение инициализации флага равно true). Из сообщений консоли .log, я узнал, что приложение не ждет ответа пользователя и продолжает выполнять другие строки кода... Я попытался поместить весь свой код в функцию оповещения (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 

person Brk    schedule 31.12.2013    source источник
comment
Каково значение e в обоих случаях?   -  person Lex    schedule 31.12.2013
comment
в начале e получить true или false зависит от того, что выбрал пользователь, но после повторного нажатия кнопки «обновить» я постоянно получаю эту ошибку, и значение «e» не печатается.   -  person Brk    schedule 31.12.2013


Ответы (2)


Подтверждение 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]);
person Federico J.    schedule 31.12.2013

Не могли бы вы использовать встроенное в JavaScript окно подтверждения? Если так то совсем просто.

if (confirm("Press OK to accept"))
    alert("You accepted!");
else
    alert("You declined!");
person Spencer Wieczorek    schedule 31.12.2013
comment
Я буду, но я ненавижу его дизайн, поэтому, скорее всего, я не буду использовать основное окно подтверждения. Могу ли я настроить эту кнопку, не нарушая ее функциональности? Любые подготовленные файлы css для такой проблемы? - person Brk; 31.12.2013
comment
Вы можете использовать внешнюю библиотеку, такую ​​как jQuery, это будет намного проще, чем создавать ее с нуля: jqueryui.com/dialog - person Spencer Wieczorek; 31.12.2013