How to make jquery stop in a loop

0

I have a type code

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 = product_id]'). val (); is different from undefined by waitForElement but it proceeds. Why does this occur?

    
asked by anonymous 07.04.2017 / 03:03

1 answer

0

It looks like your check is wrong.

Instead of checking

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

You should use

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

Or

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

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

jQuery counts with the input event that takes care of capturing any change occurred in a input . You can do this:

$('[name=produto_id]').on('input', function () {
     if ($(this).val()) {
          console.log("aqui tem um valor válido");
      }
})
    
07.04.2017 / 04:04