Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   действие Один раз за цикл (https://javascript.ru/forum/jquery/61392-dejjstvie-odin-raz-za-cikl.html)

alexmixaylov 16.02.2016 14:54

действие Один раз за цикл
 
Делаю поиск по id в таблице
если есть совпадение, тогда должен перейти по ссылке
а если нет совпадений - нужно вывести сообщение
проблема в том, что такая конструкция будет выводить сообщение несколько раз, пока не дойдет до нужной строки

//поиск по ID
        $('#filter-id').children('button').click(function () {
            var getID = $.trim($(this).prev('input').val());
            $(getTable).children('tr').children('.item_id').each(function () {
                if ($.trim($(this).text()) == getID) {
                    var getLink = $(this).next('.item_link').children().children('a').attr('href');
                    location.href = getLink;
                    return false;
                }
                else{
                        alert('Не найдено с таким ID');
                }
            });
                         
        });

как эту проблему решить, ума не приложу

Dilettante_Pro 16.02.2016 15:46

alexmixaylov,
Перед циклом создать флаг результата со значением true.
Вместо alert присвоить флагу значение false.
После цикла по флагу false выдать alert.

alexmixaylov 16.02.2016 16:01

Спасибо за помощь
понял принцип
все получилось

рони 16.02.2016 20:05

:write: а просто перенести строку 11 в 14 и выкинуть else?

alexmixaylov 16.02.2016 20:40

делал так, но выводить алерт нужно только тогда, когда нет совпадений

сделал так
var flagSearch = true;
перед циклом

потом условие if (flagSearch == false) {alert();}

рони 16.02.2016 20:52

Цитата:

Сообщение от alexmixaylov
выводить алерт нужно только тогда, когда нет совпадений

Цитата:

Сообщение от рони
перенести строку 11 в 14 и выкинуть else?

:-?

alexmixaylov 17.02.2016 22:20

как то странно получается
по логике, вы правы

если совпадает условие в цикле, срабатывает переадресация
человек уходит на другую страницу и дальнейшее выполнение скрипта прерывается
плюс там стоит return false;
и пока весь цикл не отработает, сценарий который идет после цикла не должен выполнятся

но получается что после того как начал работать each
начинает сразу работать следующая команда

я добавил на алерт setTimeout
теперь корректно отрабатывает
но это наверное не сильно правильно
//поиск по ID
            $('#filter-id').children('button').click(function () {
                var getID = $.trim($(this).prev('input').val());
                $(getTable).children('.item_id').each(function () {
                    if ($.trim($(this).text()) == getID) {
                        var getLink = $(this).next('.item_link').children().children('a').attr('href');
                        location.href = getLink;
                        return false;
                    }
                });
                setTimeout(function () {
                    alert(getID + ' не найдено с таким ID\nПопробуйте изменить параметры поиска или свяжитесь с менеджером направления');
                }, 500);
            });

рони 17.02.2016 22:53

Цитата:

Сообщение от alexmixaylov
но получается что после того как начал работать each
начинает сразу работать следующая команда

js так не умеет делать, он однопоточный, может ваш клик ещё куда всплывает? может в строку 2 добавить event.preventDefault()


Часовой пояс GMT +3, время: 21:59.