Клик происходит по элементу на который наведена мышь. Если он перекрыт другим элементом, то клик будет не тот, которй нужен.
Это иногда даже проблемы создает, когда мышь проходит над выпадающим меню и кликает не туда, куда нужно
Есть ли мастера JavaScript'а? Виснет код.
-
Выполняю код в BAS с помощью "Выполнить код", а он в 90% случаев виснет на данном участке кода.
Код генерации логина. Логика кода:
- Берется имя и фамилия (пример: Александра Попова). Меняется на нижний регистр (александра попова). Применяется транслитерация (aleksandra popova). - Переменные "englishFirstName" и "englishLastName"
- Генерируется случайная длина и случайный текст (Пример: nsfd). - Переменная "randomText"
- Генерируется случайная длина и случайные цифры (Пример: 324). - Переменная "randomNumber"
- Всё это склеивается в логин (Пример: aleksandrapopovansfd324). - Переменная "[[USER_LOGIN]]"
var [[USER_LOGIN]] function englishStringConverter(string) { //Функция транслитерации (Из русских букв - в английские) string = string.toLowerCase() for (var i = 0; i < string.length; i++) { var englishChar = [[GENERATOR_ENGLISHCHARS]][string[i]] //GENERATOR_ENGLISHCHARS - объект вида {в: 'v', г: 'g'} со всеми буквами string = string.replace(string[i], englishChar) } return string } var englishFirstName = englishStringConverter([[USER_FIRSTNAME]]) //Имя английскими буквами var englishLastName = englishStringConverter([[USER_LASTNAME]]) //Фамилия английскими буквами var randomText = '' //Случайный текст var minTextLength = 3 var maxTextLength = 4 var randomTextLength = Math.floor(Math.random() * (maxTextLength - minTextLength + 1) + minTextLength) for (var i = 0; i < randomTextLength; i++) { randomText += [[GENERATOR_LOWERCASE]][Math.floor(Math.random() * [[GENERATOR_LOWERCASE]].length)] } var randomNumber = '' //Случайные числа var minNumberLength = 1 var maxNumberLength = 2 var randomNumberLength = Math.floor(Math.random() * (maxNumberLength - minNumberLength + 1) + minNumberLength) for (var i = 0; i < randomNumberLength; i++) { randomNumber += [[GENERATOR_NUMBERS]][Math.floor(Math.random() * [[GENERATOR_NUMBERS]].length)] } [[USER_LOGIN]] = englishFirstName + englishLastName + randomText + String(randomNumber) //Готовый логинПочему виснет не понимаю. Может метод replace затратный, может циклов много... Уже всю голову сломал.
Генерирует отлично, но зависает еще лучше. -
@SecDeveloper said in Есть ли мастера JavaScript'а? Виснет код.:
var englishChar = [[GENERATOR_ENGLISHCHARS]][string[i]] //GENERATOR_ENGLISHCHARS - объект вида {в: 'v', г: 'g'} со всеми буквами
string = string.replace(string[i], englishChar)Ошибка тут
var englishChar = [[GENERATOR_ENGLISHCHARS]][string[i]] //GENERATOR_ENGLISHCHARS - объект вида {в: 'v', г: 'g'} со всеми буквами string = string.replace(string[i], englishChar)Если в словаре нет соответствия, тогда будет замена на undefined и строка может расти бесконечно.
И кстати вместо replace можно просто менять букву по индексуstring[i] = 'a'Вообще это можно было легко найти, достаточно тестироровать код частями, и добавить логи
-
@UserTrue И правда! До конца не понял, почему замена с replace иногда не могла найти соответствующую букву, ибо весь алфавит в словаре указан и undefined появляться не должно, но уже и понимать не нужно.
Превратил в массив, поменял буквы по индексу, превратил в строку. Теперь работает норм!function englishStringConverter(string) { string = string.toLowerCase().split('') for (var i = 0; i < string.length; i++) { var englishChar = VAR_GENERATOR_ENGLISHCHARS[string[i]] string[i] = englishChar } string = string.join('') return string }Спасибо.
-
@SecDeveloper дело не в replace, а в том, что если в словаре по указанному ключу не будет соответствия то вернётся undefined
-
@UserTrue Только сейчас понял: я заменял "ь" и "ъ" пустотой "". Потом длина строки уменьшалась, а цикл прежней длины и ищет, к примеру, индекс 9, когда в строке уже 8 индексов из-за стертого мягкого знака. Поэтому ищет по пустому ключу. И соответствия нет.
А если я в массиве по индексам меняю, то порядок и длина массива никак не поменяется и всё успешно заменится.Консоль логом пытался отловить, но у меня либо все буквы показывались и норм генерировалось, либо просто всё зависало и ни один консоль лог не показывался.
Вы мне очень помогли.
-
@SecDeveloper для отладки можно было в цикл добавить break, что при достижение какого-то числа итерациий вырубало