1

SKU がデータベースに存在するかどうかを確認する「SKU による注文」ページを構築しています。存在する場合は、ajax を介して名前を表示します。これまでのところは問題ありませんが、エラーが見つかった場合に送信ボタンを無効にするのに問題があります。

function sku_check(){

    // Definir array de erros e começar incrementação
    var haErros = new Array();
    var i = 0;
    console.log(haErros);

    jQuery(".enc-cod-tab").each(function(){
    var tudo = jQuery(this);

    // Incrementar posição no array
        ++i

    jQuery(this).find("#remover").click(function() {
        jQuery(tudo).remove();
    });

    jQuery(this).keyup(function(){


    var input_cod = jQuery(this).find("#sku");
    var tick = jQuery(this).find("#tick");
    var cross = jQuery(this).find("#cross");
    var nome_do_produto = jQuery(this).find("#nome_do_produto");
    var codigo_inexistente = jQuery(this).find("#codigo_inexistente");

    var sku = jQuery(input_cod).val();

    if(sku == "" || sku.length < 7){
        jQuery(input_cod).css('border', '1px #CCC solid');
        jQuery(tick).hide();
        jQuery(nome_do_produto).hide();
    } else {
        jQuery.ajax({
            type: "POST",
            url: "scripts/verificar_cod.php",
            data: 'sku='+ sku,
            cache: false,
            success: function(response){
                if(response.length > 0){
                    jQuery(input_cod).css('border', '1px #090 solid');
                    jQuery(tick).fadeIn();
                    jQuery(cross).hide();
                    jQuery(nome_do_produto).html(response);
                    jQuery(nome_do_produto).fadeIn();
                    jQuery(codigo_inexistente).hide();
                    haErros[i] = 'falso';
                    //jQuery("#btn_adicionar").css("opacity", 1);
                    //jQuery("#btn_adicionar").removeAttr("disabled")
                } else {
                    jQuery(input_cod).css('border', '1px #C33 solid');
                    jQuery(cross).fadeIn();
                    jQuery(tick).hide();
                    jQuery(nome_do_produto).hide();
                    jQuery(codigo_inexistente).fadeIn();
                    haErros[i] = 'verdadeiro';
                    //jQuery("#btn_adicionar").css("opacity", 0.2);
                    //jQuery("#btn_adicionar").attr("disabled", "disabled")}
                }
            }
        })
    }

    })

    // Função para ver se há erros
    jQuery(this).keydown(function(){
    if (jQuery.inArray("verdadeiro", haErros) != -1){
        jQuery("#btn_adicionar").css("opacity", 0.2);
        jQuery("#btn_adicionar").attr("disabled", "disabled");
    } else {
        jQuery("#btn_adicionar").css("opacity", 1);
        jQuery("#btn_adicionar").removeAttr("disabled");
    }
    });

    })};

ご覧のとおり、エラーがない場合は値 "falso" を配列に挿入しようとしています。また、ajax がデータベースから SKU を取得できなかった場合は "verdadeiro" を挿入しようとしています。次に、「keyup」関数内で、配列内の値「verdadeiro」をチェックしています。存在する場合は、送信ボタンが無効になります。

これは、2 番目 (およびそれ以降) の SKU 入力でのみ機能し、SKU を 2 文字以上入力ミスした後にのみ機能します。

例: sku123 が存在します。「sku1234」と入力しても送信ボタンは無効になりませんが、「sku12345」と入力すると期待どおりに機能します。

何が起こっているかについて何か考えはありますか?

4

0 に答える 0