Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » вопросы по javascript

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

Открыть новую тему     Написать ответ в эту тему

D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii

Цитата:
экранируется \[, а закрытие ] - нет

Не понял. На всякий случай заэкранировал начальные и конечные квадратные скобки из паттерна(вместе и по отдельности),  

Код:
pattern = `(^|\\s|[^\\u0400-\\u04FF\\w]|\\b)${pattern}(?=\\s|[^\\u0400-\\u04FF\\w]|\\b|$)`;
            pattern = new RegExp(pattern, 'miu');

но все равно ошибка

Всего записей: 1522 | Зарегистр. 05-04-2010 | Отправлено: 02:38 15-04-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D

Цитата:
На всякий случай заэкранировал начальные и конечные квадратные скобки из паттерна(

не нужно их экранировать. об этом и ошибка, что есть закрывающая ], но нет открывающей.
при экранировании это означает именно поиск символа [, а не часть синтаксиса регулярного выражения.
проблема в вашем ${pattern}, что в нем подставляется.

Всего записей: 16757 | Зарегистр. 20-09-2014 | Отправлено: 02:41 15-04-2022
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 

Цитата:
проблема в вашем ${pattern}, что в нем подставляется.

Подставил вот этот шаблон - но он же правильный:

Код:
\d+(?!\.)

 
Добавлено:
Кажется, эта строчка вызывает ошибку

Код:
pattern = pattern.replace(/\./g, '[\\u0400-\\u04FF\\w]');

Если её закоментировать - работает.
 
Добавлено:
Поэтому я заменил символ точки в качестве подстановочного знака -- на @

Всего записей: 1522 | Зарегистр. 05-04-2010 | Отправлено: 02:43 15-04-2022 | Исправлено: D1D1D1D, 02:45 15-04-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D

Цитата:
Если её закоментировать - работает.

потому что она преобразует вашу \. в \[\\u0400-\\u04FF\\w]
что и создает проблему, которую я описал выше.

Всего записей: 16757 | Зарегистр. 20-09-2014 | Отправлено: 02:51 15-04-2022
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 
Добавил экранирование первой квадратной скобки - и вроде стандартно заработало:

Код:
pattern = pattern.replace(/./g, '\[\\u0400-\\u04FF\\w]');

 
Добавлено:
Всё-таки, что-то там не то

Всего записей: 1522 | Зарегистр. 05-04-2010 | Отправлено: 03:11 15-04-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D

Цитата:
Добавил экранирование первой квадратной скобки - и вроде стандартно заработало:

зачем?? вы какую то отсебятину лепите.
вы меняете любой символ (о чем и говорит точка) на эту запись.
 
фактически, в регулярке, \. означает использование символа точки, а не любой символ как его представление точкой в регулярке. поэтому оттуда \ не придет, а приходит откуда то еще ранее.

Всего записей: 16757 | Зарегистр. 20-09-2014 | Отправлено: 03:19 15-04-2022
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
В виджете из архива на все поисковые поля назначена функция, которая заменяет некоторые введенные символы на другие, например, букву Ё на Е. Сокращенно функция выглядит так —

Код:
function fix(obj) {
   obj.value = obj.value.replace(/[ё]/g, 'е');
}

В коде виджета строк больше, и замечено, что на некоторых версиях андроида при вводе букв — они дублируются. В связи с этим вопрос — есть ли другой способ прописать подобный функционал на input onkeyup?

Убрал всё что можно убрать из файла "index.js", и оказалось, что такое поведение, когда буквы дублируются, происходит только в верхних фильтрах, а общий поиск нормально работает. Так же это не зависит от браузера и происходит на версиях Андроида 7 по Андроид 11 (как минимум). Видимо, именно работа фильтров сказывается ("содержит", "не содержит", "начинается с" и тд.)

Всего записей: 1522 | Зарегистр. 05-04-2010 | Отправлено: 14:45 15-04-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D

Цитата:
когда буквы дублируются, происходит только в верхних фильтрах

думаю, что дело не в фильтрах. оно вообще не должно вмешиваться, дублируя символ.

Всего записей: 16757 | Зарегистр. 20-09-2014 | Отправлено: 22:14 15-04-2022
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Это происходит в момент вывода результатов. То есть, всё нормально, пока происходит быстрый набор запроса. Но стоит немного замешкаться с вводом букв - как результаты обновляются и одновременно в поисковой строке дублируется то, что было до этого туда туда введено

Всего записей: 1522 | Зарегистр. 05-04-2010 | Отправлено: 05:37 16-04-2022 | Исправлено: D1D1D1D, 05:39 16-04-2022
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет. Внизу приведен код, позволяющий проводить поиск по частям слов для виджета, который здесь не раз разбирался. Следующая строчка в приведенном фрагменте кода отвечает за поиск целых слов:

Код:
pattern = `(^|\\s|[^\\u0400-\\u04FF\\w]|\\b)${pattern}(?=\\s|[^\\u0400-\\u04FF\\w]|\\b|$)`;

Возник вопрос — возможно ли назначить этот функционал на пункт из выпадающиего списка, как на скрине? Чтобы пользователь, желающий искать по целым словам, мог включить эту опцию в выпадающем списке —
 
   
 

Код:
    if (target === "filterRow" && selectedFilterOperations == 'contains') // && selectedFilterOperations == 'contains'
    {
        return [function(dataItem) {
            var pattern = getter(value);
            //pattern = pattern.replace(/(?<!\.)\*/g, '[\\u0400-\\u04FF\\w]*');
            pattern = pattern.replace(/\./g, '[\\u0400-\\u04FF\\w]');
            pattern = pattern.replace(/,,/g, '.*');
            pattern = pattern.replace(/,/g, '[\\u0400-\\u04FF\\w]*');
            pattern = `(^|\\s|[^\\u0400-\\u04FF\\w]|\\b)${pattern}(?=\\s|[^\\u0400-\\u04FF\\w]|\\b|$)`;
            pattern = new RegExp(pattern, 'miu');
            var cell = getter(dataItem[self.dataField]);
            if (cell.match(pattern)) {
                return true;
            } else {
                return false;
            }
        }, "=", true];
    } else {
        return [function(dataItem) {
            return getter(dataItem[self.dataField]);
        }, selectedFilterOperations || 'contains', value];
    }

Всего записей: 1522 | Зарегистр. 05-04-2010 | Отправлено: 19:13 06-05-2022 | Исправлено: D1D1D1D, 19:13 06-05-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D
возможно.
 

Цитата:
selectedFilterOperations == 'contains'

показывает какая опция выбрана - contains = содержит
если будет выбрано equals (или как то иначе может называться), то применяется другой алгоритм фильтрации.

Всего записей: 16757 | Зарегистр. 20-09-2014 | Отправлено: 00:00 07-05-2022 | Исправлено: Mavrikii, 00:00 07-05-2022
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 
Пробовал дублировать код, с заменой contains на equals, а также совмещенный вариант, но не срабатывает —

Код:
    if (target === "filterRow" && selectedFilterOperations == 'contains')
    {
        return [function(dataItem) {
            var pattern = getter(value);
            //pattern = pattern.replace(/(?<!\.)\*/g, '[\\u0400-\\u04FF\\w]*');
            pattern = pattern.replace(/@/g, '[\\u0400-\\u04FF\\w]');
            pattern = pattern.replace(/,,/g, '.*');
            pattern = pattern.replace(/,/g, '[\\u0400-\\u04FF\\w]*');
            pattern = `(^|\\s|[^\\u0400-\\u04FF\\w]|\\b)${pattern}`;
            pattern = new RegExp(pattern, 'miu');
            var cell = getter(dataItem[self.dataField]);
            if (cell.match(pattern)) {
                return true;
            } else {
                return false;
            }
        }, "=", true];
    } else {
        return [function(dataItem) {
            var pattern = getter(value);
            //pattern = pattern.replace(/(?<!\.)\*/g, '[\\u0400-\\u04FF\\w]*');
            pattern = pattern.replace(/@/g, '[\\u0400-\\u04FF\\w]');
            pattern = pattern.replace(/,,/g, '.*');
            pattern = pattern.replace(/,/g, '[\\u0400-\\u04FF\\w]*');
            pattern = `(^|\\s|[^\\u0400-\\u04FF\\w]|\\b)${pattern}(?=\\s|[^\\u0400-\\u04FF\\w]|\\b|$)`;
            pattern = new RegExp(pattern, 'miu');
            var cell = getter(dataItem[self.dataField]);
            if (cell.match(pattern)) {
                return true;
            } else {
                return false;
            }
        }, selectedFilterOperations || 'equals', value];
    }

 
В чем может быть ошибка?

Всего записей: 1522 | Зарегистр. 05-04-2010 | Отправлено: 01:31 07-05-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D

Цитата:
В чем может быть ошибка?

наверно и потому, что нужно учитывать и target, плюс смотреть что там приходит и в каком виде.

Цитата:
    } else {
        return [function(dataItem) {
            return getter(dataItem[self.dataField]);
        }, selectedFilterOperations || 'contains', value];
    }

плюс не убивать этот else блок
 

Цитата:
с заменой contains на equals

я не знаю что там передается, посмотреть через брейкпоинт или console.log
 

Всего записей: 16757 | Зарегистр. 20-09-2014 | Отправлено: 01:41 07-05-2022
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 
Так заработало, спасибо! —  
 

Код:
    if (target === "filterRow" && selectedFilterOperations == 'contains') {
        return [function(dataItem) {
            var pattern = getter(value);
            //pattern = pattern.replace(/(?<!\.)\*/g, '[\\u0400-\\u04FF\\w]*');
            pattern = pattern.replace(/@/g, '[\\u0400-\\u04FF\\w]');
            pattern = pattern.replace(/,,/g, '.*');
            pattern = pattern.replace(/,/g, '[\\u0400-\\u04FF\\w]*');
            pattern = `(^|\\s|[^\\u0400-\\u04FF\\w]|\\b)${pattern}`;
            pattern = new RegExp(pattern, 'miu');
            var cell = getter(dataItem[self.dataField]);
            if (cell.match(pattern)) {
                return true;
            } else {
                return false;
            }
        }, "=", true];
    } else if (target === "filterRow") {
        return [function(dataItem) {
            var pattern = getter(value);
            //pattern = pattern.replace(/(?<!\.)\*/g, '[\\u0400-\\u04FF\\w]*');
            pattern = pattern.replace(/@/g, '[\\u0400-\\u04FF\\w]');
            pattern = pattern.replace(/,,/g, '.*');
            pattern = pattern.replace(/,/g, '[\\u0400-\\u04FF\\w]*');
            pattern = `(^|\\s|[^\\u0400-\\u04FF\\w]|\\b)${pattern}(?=\\s|[^\\u0400-\\u04FF\\w]|\\b|$)`;
            pattern = new RegExp(pattern, 'miu');
            var cell = getter(dataItem[self.dataField]);
            if (cell.match(pattern)) {
                return true;
            } else {
                return false;
            }
        }, "=", true];
    } else {
        return [function(dataItem) {
            return getter(dataItem[self.dataField]);
        }, selectedFilterOperations || 'contains', value];
    }

Всего записей: 1522 | Зарегистр. 05-04-2010 | Отправлено: 04:43 07-05-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D

Цитата:
Так заработало, спасибо! —  

в виду того, что там много идентичного кода, условие нужно ставить не в том месте
 

Код:
    if (target === "filterRow") {
        return [function(dataItem) {
            var pattern = getter(value);
            pattern = pattern.replace(/@/g, '[\\u0400-\\u04FF\\w]');
            pattern = pattern.replace(/,,/g, '.*');
            pattern = pattern.replace(/,/g, '[\\u0400-\\u04FF\\w]*');
            if (selectedFilterOperations == 'contains')
                pattern = `(^|\\s|[^\\u0400-\\u04FF\\w]|\\b)${pattern}`;
            else
                 pattern = `(^|\\s|[^\\u0400-\\u04FF\\w]|\\b)${pattern}(?=\\s|[^\\u0400-\\u04FF\\w]|\\b|$)`;
            pattern = new RegExp(pattern, 'miu');
            var cell = getter(dataItem[self.dataField]);
            if (cell.match(pattern)) {
                return true;
            } else {
                return false;
            }
        }, "=", true];
    } else {
        return [function(dataItem) {
            return getter(dataItem[self.dataField]);
        }, selectedFilterOperations || 'contains', value];
    }

не проверял

Всего записей: 16757 | Зарегистр. 20-09-2014 | Отправлено: 04:47 07-05-2022
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 
Спасибо!

Всего записей: 1522 | Зарегистр. 05-04-2010 | Отправлено: 04:56 07-05-2022
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Можно ли задать открытие документа по клику, не прописывая "HREF"? Код ниже не срабатывает

Код:
 
<u onclick="document.location=("about.html");return false;">

Всего записей: 1522 | Зарегистр. 05-04-2010 | Отправлено: 16:51 07-05-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D
https://ptpit.ru/learn/JSADV/02.htm

Всего записей: 16757 | Зарегистр. 20-09-2014 | Отправлено: 17:00 07-05-2022
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Так тоже не работает:

Код:
<u onclick="document.location=(\"about.html\");return false;">

Всего записей: 1522 | Зарегистр. 05-04-2010 | Отправлено: 17:05 07-05-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D
Скобки круглые там зачем?

Всего записей: 16757 | Зарегистр. 20-09-2014 | Отправлено: 17:21 07-05-2022
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

Компьютерный форум Ru.Board » Интернет » Web-программирование » вопросы по javascript


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

LiteCoin: LgY72v35StJhV2xbt8CpxbQ9gFY6jwZ67r

Рейтинг.ru

Рейтинг.ru