Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   .click() по элементам (https://javascript.ru/forum/jquery/71388-click-po-ehlementam.html)

Nikolay37 14.11.2017 23:28

.click() по элементам
 
Почему не работает .click() на элементе. Пробегаюсь по списку через цикл, нахожу нужный, ставлю ему click, но сам клик не срабатывает. Через debugger и напрямую (без цикла) все отлично работает

рони 15.11.2017 01:53

Nikolay37,
где код?

Nikolay37 15.11.2017 08:08

Цитата:

Сообщение от рони (Сообщение 470094)
Nikolay37,
где код?

let baseName = "apple,pineapple,translate".split(',') 
let i=0 
let n=0 
start() 
function start(){ 
for(i;i<document.getElementsByClassName('name').length;i++){ 
if(document.getElementsByClassName('name')[i].innerText == baseName[n]){ 
document.getElementsByClassName('name')[i].click() 
} 

if(n < baseName.length -1){ 
i=0 
n++ 
start() 
} 
} 
}

ksa 15.11.2017 08:42

Nikolay37, пример нужен полный, с хтмэлем...

Nikolay37 15.11.2017 09:13

Цитата:

Сообщение от ksa (Сообщение 470105)
Nikolay37, пример нужен полный, с хтмэлем...

Там авторизация через steam нужна, я сомневаюсь что вы так заморачиваться будете, или есть аккаунт от steam? Вообще с чем может быть связано?

ksa 15.11.2017 09:15

Цитата:

Сообщение от Nikolay37
Там авторизация через steam нужна

Пример сам сделай тестовый и тут выложи. Какая тут авторизация? :D
Цитата:

Сообщение от Nikolay37
Вообще с чем может быть связано?

Вот на примере как раз все видно будет. ;)

ksa 15.11.2017 09:17

Nikolay37, пока не понятно зачем применяется рекурсивный вызов функции вместо обычного цикла...
Так же трижды используется
document.getElementsByClassName('name')

рони 15.11.2017 09:56

:-? start плохое имя для функции, может переименовать

Nexus 15.11.2017 09:57

Цитата:

Сообщение от Nikolay37
Почему не работает .click() на элементе. Пробегаюсь по списку через цикл, нахожу нужный, ставлю ему click, но сам клик не срабатывает. Через debugger и напрямую (без цикла) все отлично работает

У вас в логике работы дырень.
Текущий код будет проверять только первый элемент выборки на соответствие его контента значению эл. массива basename.
Попробуйте так:
let baseName = "apple,pineapple,translate".split(',')
let i = 0
let n = 0
let nodes = document.getElementsByClassName('name');
console.log('Найдено элементов: ' + nodes.length);
start()

function start() {
    for (i; i < nodes.length; i++) {
        console.log(nodes[i].innerText + ' == ' + baseName[n] + ' -> ' +
            (nodes[i].innerText == baseName[n] ? 'true' : 'false'));
        if (nodes[i].innerText == baseName[n]) {
            console.log('CLICK');
            nodes[i].click();
            break; //Если нужно кликнуть только по одному элементу
        }
    }
    if (n < baseName.length - 1) {
        i = 0
        n++
        console.log('Restart');
        start()
    }

}

Nikolay37 15.11.2017 12:06

Цитата:

Сообщение от ksa (Сообщение 470108)
Nikolay37, пока не понятно зачем применяется рекурсивный вызов функции вместо обычного цикла...
Так же трижды используется
document.getElementsByClassName('name')

Рекурсия нужна для того, чтобы перечислять мои элементы из baseName
"Так же трижды используется"
document.getElementsByClassName('name')
[/quote]

Ну я могу в целом это в переменную записать, смысл не изменится


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