Порядок выполнения JQuery, проблема синхронизации

avatar
echo
8 апреля 2018 в 04:50
52
1
2

это кажется довольно простой проблемой, но я мог выяснить, как убедиться, что jquery выполняется, прежде чем я проверю элементы HTML. У меня есть цикл, чтобы войти в панель поиска, прочитать результаты и проверить, возвращают ли условия поиска что-нибудь.

Это делает то, что я хочу, за исключением того, что структуры if проверяют наличие элемента еще до того, как будет нажата кнопка поиска. Веб-сайт, на котором я запускаю расширение: https://www.avnet.com/wps/portal/us

var searchTerms = ["internal", "null?","random", "asdfsadfa", "relay"];

var i;
for (i = 2; i < searchTerms.length; i++) {
    var curTerm = searchTerms[i];
    $('#searchInput').val(curTerm);
    $('.input-group-addon').click();
    if($(".avn-noresultspage-main-section")[0]){
        $(".avn-noresultspage-main-section").css( "border", "10px solid red" );
        alert('This is a Null!');
    }else{
        alert('Not a Null!');
    } 
}

Итак, немного погуглив, я вижу, что функция цепочки/обратного вызова — это то, что нужно. Пример функции обратного вызова Поэтому я вызываю функцию проверки элементов после щелчка в jquery. Но сейчас ничего не происходит. Я просто запускаю цикл for, а последний щелчок даже не был выполнен?

Как правильно связать действия?

var searchTerms = ["internal", "null?","random", "asdfsadfa", "relay"];

var i;
for (i = 2; i < searchTerms.length; i++) {
    var curTerm = searchTerms[i];
    $('#searchInput').val(curTerm);
    $('.input-group-addon').click(function() {
      if($(".avn-noresultspage-main-section")[0]){
        $(".avn-noresultspage-main-section").css( "border", "10px solid red" );
        alert('This is a Null!');
      }else{
        alert('Not a Null!');
      }
    } );
}

Обновление: я пытался использовать функцию тайм-аута, но, кажется, также заморозил выполнение клика.

var searchTerms = ["internal", "null?","random", "asdfsadfa", "relay"];

var i;
for (i = 2; i < searchTerms.length; i++) {
    var curTerm = searchTerms[i];

    setTimeout(function() {
        $('#searchInput').val(curTerm);
        $('.input-group-addon').click();
    }, (3 * 1000));
    if($(".avn-noresultspage-main-section")[0]){
        $(".avn-noresultspage-main-section").css( "border", "10px solid red" );
        alert('This is a Null!');
    }else{
        alert('Not a Null!');
    } 
}

Есть ли способ сделать задержку после клика?

Источник
sridhar..
8 апреля 2018 в 05:18
0

Когда я скопировал ваш код на указанном веб-сайте, он работает нормально. Я не видел никаких проблем.

echo
8 апреля 2018 в 05:35
0

Код будет работать нормально, но не будет делать то, что задумано. Он проверяет веб-страницу на наличие результатов поиска, пока действие нажатия кнопки не было завершено браузером. $('.input-group-addon').click(); предполагается завершить до того, как я проверю, существует ли диапазон классов $(".avn-noresultspage-main-section")[0]

sridhar..
8 апреля 2018 в 05:47
0

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

Ответы (1)

avatar
Nhon Dinh
8 апреля 2018 в 05:34
2

Ваш измененный код определенно отличается по логике кода. Синтаксис .click(function) используется для добавления/изменения обработчика события для события "щелчок". Чтобы он работал как в первой версии, вам нужно добавить после него триггер цепочки, например click(function(){...}).click(); И причина, по которой проверка кода выполняется до триггера события щелчка, заключается в том, что событие поиска, вероятно, является событием AJAX, и когда вы запускаете щелчок, Javascript будет только «щелкать» и выполнять код проверки, не дожидаясь, пока событие поиска вернет результат. Вы должны использовать:

  $(document).ajaxSuccess(function(){
         //checking code here
});

Но это относится ко ВСЕМ событиям ajax на этом сайте, поэтому лучшим решением будет добавить тайм-аут ожидания проверки кода, чтобы убедиться, что мы вернули результат поиска.

echo
8 апреля 2018 в 05:41
0

Я пытался использовать тайм-аут в течение трех секунд после щелчка. Но каким-то образом кажется, что он также задерживает щелчок и все еще запускает код проверки до завершения щелчка. setTimeout (функция () { var a = 1; }, (3 * 1000));

Nhon Dinh
8 апреля 2018 в 05:42
0

где вы поместили строку кода тайм-аута? Можете ли вы опубликовать весь блок кода?

Nhon Dinh
8 апреля 2018 в 05:58
0

ну, код проверки ДОЛЖЕН быть в области действия функции setTimeout, прямо на месте var a=1;

echo
8 апреля 2018 в 20:41
0

так? setTimeout(function() { $('#searchInput').val(curTerm); $('.input-group-addon').click(); }, (3 * 1000));

Nhon Dinh
9 апреля 2018 в 02:51
0

нет... я имею в виду логику проверки - оператор if... не код запуска