Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.02.2016, 14:54
Аспирант
Отправить личное сообщение для alexmixaylov Посмотреть профиль Найти все сообщения от alexmixaylov
 
Регистрация: 14.09.2013
Сообщений: 70

действие Один раз за цикл
Делаю поиск по 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');
                }
            });
                         
        });

как эту проблему решить, ума не приложу
Ответить с цитированием
  #2 (permalink)  
Старый 16.02.2016, 15:46
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

alexmixaylov,
Перед циклом создать флаг результата со значением true.
Вместо alert присвоить флагу значение false.
После цикла по флагу false выдать alert.
Ответить с цитированием
  #3 (permalink)  
Старый 16.02.2016, 16:01
Аспирант
Отправить личное сообщение для alexmixaylov Посмотреть профиль Найти все сообщения от alexmixaylov
 
Регистрация: 14.09.2013
Сообщений: 70

Спасибо за помощь
понял принцип
все получилось
Ответить с цитированием
  #4 (permalink)  
Старый 16.02.2016, 20:05
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

а просто перенести строку 11 в 14 и выкинуть else?
Ответить с цитированием
  #5 (permalink)  
Старый 16.02.2016, 20:40
Аспирант
Отправить личное сообщение для alexmixaylov Посмотреть профиль Найти все сообщения от alexmixaylov
 
Регистрация: 14.09.2013
Сообщений: 70

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

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

потом условие if (flagSearch == false) {alert();}
Ответить с цитированием
  #6 (permalink)  
Старый 16.02.2016, 20:52
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

Сообщение от alexmixaylov
выводить алерт нужно только тогда, когда нет совпадений
Сообщение от рони
перенести строку 11 в 14 и выкинуть else?
Ответить с цитированием
  #7 (permalink)  
Старый 17.02.2016, 22:20
Аспирант
Отправить личное сообщение для alexmixaylov Посмотреть профиль Найти все сообщения от alexmixaylov
 
Регистрация: 14.09.2013
Сообщений: 70

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

если совпадает условие в цикле, срабатывает переадресация
человек уходит на другую страницу и дальнейшее выполнение скрипта прерывается
плюс там стоит 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);
            });
Ответить с цитированием
  #8 (permalink)  
Старый 17.02.2016, 22:53
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

Сообщение от alexmixaylov
но получается что после того как начал работать each
начинает сразу работать следующая команда
js так не умеет делать, он однопоточный, может ваш клик ещё куда всплывает? может в строку 2 добавить event.preventDefault()
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выполнение события один раз darl jQuery 5 02.12.2014 08:27
слайдер срабатывает один раз serrrgggeee Javascript под браузер 8 13.10.2014 16:03
Как после ресайза вызвать обработчик один раз? Nanto Events/DOM/Window 1 23.08.2013 19:55
Рефреш странички только один раз Marker Events/DOM/Window 1 23.08.2013 01:33
Скрипт правильно работает только один раз, после начинает выдавать ошибку. xodock Events/DOM/Window 2 23.07.2012 13:04