Непонятное поведение pNotify в вычислении

211
04 апреля 2017, 12:03

После потери фокуса, если поле заполнено но невалидно почему то выводятся сразу два одинаковых сообщения: Ссылка не введена...

НУЖНО ЧТО БЫ ВЫВОДИЛОСЬ ТОЛЬКО ОДНО Никак не пойму, где ошибка в коде.

// Управляем состоянием кнопки Отправить 
// УСЛОВИЯ включения кнопки:  
// значение поля список должно быть отличное от 0 
// поле ссылка должно быть не пустое и валидное 
var input =  $('#input'); 
input.bind('focus', function() { 
 
    var select_intent = $('#dropdown_intent_widget').val(); 
 
    if (select_intent === '0') { 
 
        // Блокируем кнопку Отправить 
        $('#button').attr('class', 'md-btn disabled'); 
    } 
}); 
input.bind('change focusout', function() { 
 
    var input_val = $(this).val(); 
    var select_intent = $('#dropdown_intent_widget').val(); 
    var regexp = new RegExp("^(https|http)(:\/\/)(www\.)?([a-zA-Z0-9_\.-]+)\.([a-z]{2,10})$"); 
 
    if (select_intent !== '0') { 
 
        if (regexp.test(input_val)) { 
 
            // Разблокируем кнопку Отправить 
            $('#button').attr('class', 'md-btn enable'); 
        } else { 
 
            // Блокируем кнопку Отправить 
            $('#button').attr('class', 'md-btn disabled'); 
 
            // Выводим сообщение 
            new PNotify({ 
                title: 'Ошибка', 
                text: 'Ссылка не введена или введена в неверном форате', 
                type: 'error', 
                icon: 'false', 
                buttons: { 
                    sticker: false 
                } 
            }); 
        } 
    } 
});
<!-- поле - список (подгружается динамически в select) --> 
<input type="text" id="dropdown_intent_widget" value="0" /> 
 
<!-- поле - ссылка --> 
<input type="text" id="input" name="input" value="" /> 
 
<!-- кнопка - по умолчанию выключена --> 
<a id="button" class="md-btn disabled">Отправить</a>

Answer 1

Проблема не в pNotify, а в этой строке:

input.bind('change focusout', function() {

Получается вы вешаете на два события обработку, и когда убираете фокус отрабатывает и focusout и change если значение поля изменилось, и появляется 2 сообщения, когда значение не меняется отрабатывает только focusout и вы думаете что всё работает правильно.

Думаю можно убрать focusout и оставить только change, получится если убрали фокус и значение в поле осталось прежним событие не отработает, а так при focusout получается что вы проверяете правильность значения каждый раз, даже если оно не менялось.

READ ALSO
Как правильно написать ScrollTop в FireFox?

Как правильно написать ScrollTop в FireFox?

Всем привет! Следующий код работает в Гугл Хроме:

263
Bootstrap selectpicker выпадание списка справа

Bootstrap selectpicker выпадание списка справа

Можно ли встроенными средствами bootstrap selectpicker организовать выпадание (выпадение) списка select вправо, а не вниз?

271
Проблема с Vega [дубликат]

Проблема с Vega [дубликат]

На данный вопрос уже ответили:

214
Как исправить ошибку в микроразметке?

Как исправить ошибку в микроразметке?

Добрый день, всем! Тестирую микроразметку Product https://searchgoogle

206