С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
jQuery
Войти
Регистрация
Восстановить пароль
 
MORD93
0 / 0 / 0
Регистрация: 28.12.2014
Сообщений: 12
1

Как упростить повторяющийся код

08.02.2018, 15:48. Просмотров 174. Ответов 6
Метки нет (Все метки)

Всем добрый вечер. Есть два куска кода, которые отвечают за автокоплит допустим городов и улиц. У них почти всё одинаковое. И каждый раз повторять этот код не охото. Как их можно объединить, чтобы смотрелось более эстетично и проще
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*1 КОД*/
if ($("input.search-product-detail" + hash)) {
            var bestPictures = new Bloodhound({
                datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
                queryTokenizer: Bloodhound.tokenizers.whitespace,
                prefetch: '/admin/ajax/getProductsDetail',
                remote: {
                    url: '/admin/ajax/getProductsDetail/?query=%QUERY',
                    wildcard: '%QUERY'
                },
                sufficient: 10
            });
 
            $('input.search-product-detail' + hash).typeahead({
                autoselect: true,
                hint: true,
                highlight: true,
                minLength: 3
            }, {
                limit: 20,
                name: 'city',
                display: 'name',
                source: bestPictures,
 
                templates: {
                    suggestion: function (data) {
                        return '<p align="left"><a href="javascript:;">' + data.name + '</a></p>';
                    }
                }
 
            }).bind("typeahead:selected", function (obj, datum, name) {
                hash = $(this).data('hash');
                $(this).addClass('background-number');
                $(this).on( "keydown", function( e ) {
                    var code = e.keyCode;
                    if( code == 8) {
                        $('#input-number' + hash).removeClass('background-number');
                    }
                });
 
                $('#product-detail-id' + hash).val(datum.id);
            });             
        }   
 
 
 
        /*2 КОД*/
        if ($("input.search-provider" + hash)) {
            var bestPictures = new Bloodhound({
                datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
                queryTokenizer: Bloodhound.tokenizers.whitespace,
                prefetch: '/admin/ajax/Providers/getList',
 
                remote: {
                    url: '/admin/ajax/Providers/getList/?query=%QUERY',
                    wildcard: '%QUERY'
                },
                sufficient: 10
            });
 
            $('input.search-provider' + hash).typeahead({
                autoselect: true,
                hint: true,
                highlight: true,
                minLength: 3
            }, {
                limit: 20,
                name: 'city',
                display: 'name',
                source: bestPictures,
 
                templates: {
                    suggestion: function (data) {
                        return '<p align="left"><a href="javascript:;">' + data.name + '</a></p>';
                    }
                }
 
            }).bind("typeahead:selected", function (obj, datum, name) {
                hash = $(this).data('hash');
                $(this).addClass('background-number');
                $(this).on( "keydown", function( e ) {
                    var code = e.keyCode;
                    if( code == 8) {
                        $('#input-number_provider' + hash).removeClass('background-number');
                    }
                });
 
                $('#provider-id' + hash).val(datum.id);
            });
        }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.02.2018, 15:48
Ответы с готовыми решениями:

Посоветуйте как упростить код? :)
Привет, практикуюсь в jquery, подскажите как можно упростить то что у меня...

Как упростить программный код?
Как упростить этот программный код, чтобы по 200 раз не писать эти цифры? ...

Как можно упростить код?
javascript изучаю недавно, написал небольшой код, но я думаю его можно сделать...

Как упростить код и правильно использовать ООП?
Доброе время суток. Есть один блок в котором несколько блоков и второй блок...

Нужно повторяющийся код оформить функцией - что принимать параметром?
Пытаюсь написать тест на знание творчества Тургенева. Если ответ правильный -...

6
atanov
213 / 206 / 79
Регистрация: 26.05.2016
Сообщений: 1,295
08.02.2018, 16:00 2
Сделать функцию и вызывать её.
0
MORD93
0 / 0 / 0
Регистрация: 28.12.2014
Сообщений: 12
08.02.2018, 16:17  [ТС] 3
Я это понял. Но как? Можете привести пример на данном коде. Спасибо за ответ.
0
atanov
213 / 206 / 79
Регистрация: 26.05.2016
Сообщений: 1,295
08.02.2018, 17:06 4
Никто кроме Вас, как автор кода в нём лучше не разберётся. Поэтому Вам нужно понять самому, где повторяющиеся действия. Вот у Вас
Цитата Сообщение от MORD93 Посмотреть сообщение
У них почти всё одинаковое
, а сами Вы представляете, что именно не совпадает? На первый взгляд строка 41 со строкой 88 не бъётся. Вот отсюда и пляшите.
0
MORD93
0 / 0 / 0
Регистрация: 28.12.2014
Сообщений: 12
09.02.2018, 07:19  [ТС] 5
так ладно...
вот идет объявление переменной в каждом коде. Внутри параметры. Различия их - параметры prefetch и remote.
Javascript
1
2
3
4
5
6
7
8
9
10
var bestPictures = new Bloodhound({
      datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
      queryTokenizer: Bloodhound.tokenizers.whitespace,
      prefetch: '/admin/ajax/getProductsDetail',
      remote: {
         url: '/admin/ajax/getProductsDetail/?query=%QUERY',
         wildcard: '%QUERY'
      },
      sufficient: 10
      });
остальные параметры одинаковые. Как сделать так чтобы каждый раз их не объявлять?
0
j2FunOnly
Модератор
953 / 878 / 504
Регистрация: 05.06.2015
Сообщений: 2,009
09.02.2018, 10:39 6
MORD93, у вас в обработчиках события typeahead:selected переменная hash специально сорит в глобальную область? Не понятно потому что в условии тоже присутствует переменная hash. И в какой момент эти if-ы с пометками код 1/2 срабатывают - при загрузке единожды или как-то по-другому?
0
MORD93
0 / 0 / 0
Регистрация: 28.12.2014
Сообщений: 12
09.02.2018, 13:31  [ТС] 7
Да, увидел ошибку с переменной. Тем более она объявлена уже выше.
Объясню как работает код. При нажатии на кнопку создается 2 поля (в tr) - область и город. hash это переменная в которой хранится рандомное 6-ти значное число, чтобы на серваке понимать и заменять на нужный мне id. При вводе в первое поле срабатывает первый код. При вводе во второе поле срабатывает второй. Создаются эти два кода каждый раз при нажатии на кнопку создать, иначе если я создам 10 полей сразу, то поиск не будет корректно работать.
0
09.02.2018, 13:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.02.2018, 13:31

Упростить код
Добрый день! Есть код, который оборачивает каждую строку в одном из четырёх...

Упростить код
Имеется var Ca = function(){ this.getArgs.apply(this) }; ...

Упростить код
Есть скрипт, его нужно упростить, чтобы было по меньше кода и по легче сделан,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru