How to make jquery stop in a loop

Asked

Viewed 195 times

0

I have a code like

function check() {
    if (!$.isNumeric($('[name=produto_id]').val()) || $('[name=produto_id]').val()<=0) {
      console.log($('[name=produto_id]').val()) ; 
      return setTimeout(check, 1000);
    }

}

function waitForElement(){
    if($('[name=produto_id]').val() =='undefined'){
        console.log('wait');
        setTimeout(waitForElement, 250);   
    }
}

  waitForElement();
  $produto_id = $('[name=produto_id]').val();


      $produto_id = $('[name=produto_id]').val();
        $('[name=produtofabricacaosel]').replaceWith('<select name="produtofabricacaosel" class="w300"> </select>');
                var callback = function(resp) {

                    if (!resp.success) {
                        console.log(resp.msg);
                    }
                    console.log(resp);
                    resp.produtos.forEach(function(row){
                        if(row.titulo != ''){

                            $('[name=produtofabricacaosel]').value =  $produto_id; 
                            if (row.titulo== $produto_id){
                                $('[name=produtofabricacaosel]').append($('<option>', { 
                                    value: row.titulo+'-'+row.id,
                                    text : row.titulo, 
                                    selected : 'selected'
                                }));
                            }else{
                                $('[name=produtofabricacaosel').append($('<option>', { 
                                    value: row.titulo+'-'+row.id,
                                    text : row.titulo, 
                                }));
                            }
                        }               

                    });
                };
        console.log($produto_id)
              $.ajax({
              url: '../index.php/select-admin-produtofabricacao',
            type: 'post',
            data: {
                produto_id: $produto_id    
            },
              success: callback, 
              error: function() {
                callback({
                    success: false,
                    //msg: "Consulta inválida"
                });
             }
           });
});

I would like it only when $('[name=producto_id]'). val(); is different from Undefined goes through waitForElement but it goes on. Why does this happen?

  • There is no setTimeoutInterval javascript. What is the problem?

  • Actually it is jquery I expressed myself wrong I need to wait for an ajax answer but I do not know of one it comes to fill the value of i to only then perform the sum.

  • 2

    I suggest you adapt your code to the scenario you need, to find a more satisfactory answer. Click edit if necessary and add more details to your question.

1 answer

0


It seems your check is wrong.

Instead of checking out

  $('...').val() === 'undefined'

You should use

 $('...').val() === undefined

Or

typeof($('...').val()) === 'undefined')

Another thing: Are you sure you need to do this setTimeoutto "watch" the value of '[name=produto_id]?

jQuery has the event inputthat takes care of caputar any change occurred in a input. You can do it like this:

$('[name=produto_id]').on('input', function () {
     if ($(this).val()) {
          console.log("aqui tem um valor válido");
      }
})
  • I didn’t know this event helped a lot.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.