Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Нажатие на кнопку срабатывает только в конце массива (https://javascript.ru/forum/css-html/64168-nazhatie-na-knopku-srabatyvaet-tolko-v-konce-massiva.html)

angelzzz 23.07.2016 20:14

Нажатие на кнопку срабатывает только в конце массива
 
Есть код, но он выполняется только в конце выполнения массива, то есть только после того как будут по очереди подставлены все значения:

var websitesArr = [ "ya.ru", "google.com", "ok.ru", "vk.com", "fb.com" ];
  for (var i=0; i<websitesArr.length; i++) {
      $('input[name=url]').val(websitesArr[i]);
      $('input[name=proceed]').trigger('click'); 
  }


Как выполнять код каждый раз, когда вставляется новое значение в input name=url?

рони 23.07.2016 20:22

angelzzz,
вы что-то не договариваите ...
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">  input[name=proceed]{
    width: 400px;
  }

  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script>
$(function() {
$('input[name=proceed]').on("click",function() {
   this.value += " "+$('input[name=url]').val()
})


var websitesArr = [ "ya.ru", "google.com", "ok.ru", "vk.com", "fb.com" ];
  for (var i=0; i<websitesArr.length; i++) {
      $('input[name=url]').val(websitesArr[i]);
      $('input[name=proceed]').trigger('click');
  }

});
  </script>
</head>

<body>
<input type="text" name="url"><input type="text" name="proceed">
</body>
</html>

angelzzz 23.07.2016 23:05

ваш код делает что-то не то.

я пытаюсь выполнять свой скрипт на чужом сайте.

Суть скрипта:
1. найти форму с инпутом, взять ее значение
2. найти значение с определенными свойствами
3. добавить их в массив
4. взять значение из другого массива, подставить в форму с инпутом
5. программно нажать кнопку
6. после обновления повторить операции

Что есть на данный момент

var jq = document.createElement('script');
jq.src = "//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js";
document.getElementsByTagName('head')[0].appendChild(jq);

jq.addEventListener('load',function () {
  var result = [];
  var websiteName = $('input[name=url]').val();
  var styleRedEl = $('b[style*="color:red"]').text();
  result[websiteName]=styleRedEl;
  console.log ( result );
  var websitesArr = [ "ya.ru", "google.com", "ok.ru", "vk.com", "fb.com" ];
  for (var i=0; i<websitesArr.length; i++) {
      $('input[name=url]').val(websitesArr[i]);
      //var step =  $('input[name=url]').val();
      //alert (step); //to see result on this step
      $('input[name=proceed]').trigger('click'); // к вопросу 2
  }
});


выполняю это через сниппет google chrome (если есть решения лучше, то буду благодарен за советы).

что не так: сейчас после запуска скрипта по очереди вводятся все данные из массива в инпут и только после этого выполняется нажатие на кнопку (программно) и перезагружается страница.

рони 23.07.2016 23:16

Цитата:

Сообщение от angelzzz
ваш код делает что-то не то.

ок
он делает это
Цитата:

Сообщение от angelzzz
Как выполнять код каждый раз, когда вставляется новое значение в input name=url?

а вы по прежнему что-то не договариваите ... думаю что про время для ответа сервера ... для которого цикл for не оставляет времени, хочется синхронно, а оно вон как асинхронно ... это так мысли вслух.

angelzzz 23.07.2016 23:35

что тут можно изменить? или как решить проблему?

рони 23.07.2016 23:38

angelzzz,
дождаться ответа сервера и продолжить со следующим элементом ...

angelzzz 24.07.2016 00:36

Возможно все сделал. Только не могу проверить, после выполнения и обновления страницы 1 раз дальше ничего не происходит. Напомню, что делаю это в сниппете, может через tampermonkey делатЬ? ноя не могу понять как адаптировать код к tampermonkey

angelzzz 25.07.2016 09:24

Код все еще не работает. У кого-нибудь есть варианты?

рони 25.07.2016 09:31

angelzzz,
если страница перезагружается, то хранить промежуточные результаты в localStorage, подробнее не подскажу


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