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」と入力すると期待どおりに機能します。
何が起こっているかについて何か考えはありますか?