2015-11-02 2 views
-1

J'essaie d'activer l'événement keyup sur un élément d'entrée, le problème est qu'il ne s'est pas déclenché une fois que j'appuie sur une touche, je dois faire un autre événement clé pour l'activer, ce qui n'est pas Ordinaire!La fonction de touche jQuery ne fonctionne pas correctement

Voici mon code:

$(".conv").keyup(function(){ 
    var itemId = new Array(); 

    $(".itemId").each(function() { 
     itemId.push($(this).text()); 
    }); 

    if (itemId.length == 0 || isEmpty($(this).val())) { 
     $(this).val('0.00'); 
     return false; 
    } 

    if (!$.isNumeric($(this).val())) { 
     alert("Only numeric values are allowed in '" + $(this).parent().parent().find('th').text() + "' field."); 
     return false; 
    } 

    calcShipping(); 
}); 

J'ai essayé d'utiliser "sur" comme celui-ci, mais aussi ne fonctionne pas:

$('body').on("keyup", ".plus", function(){ 
    var itemId = new Array(); 

    $(".itemId").each(function() { 
     itemId.push($(this).text()); 
    }); 

    if (itemId.length == 0) { 
     $(this).val('0.00'); 
     return false; 
    } 

    calcShipping(); 
}); 

Calculer la fonction de transport:

var calcShipping = function() { 

    if (isEmpty($(".totalCost2").text())) { 
     $(".totalCost2").text(parseInt($(".totalCost").text())); 
    } 

    var plus  = 0; 
    var conv  = parseInt($(".conv").val()); 
    var tCost  = parseInt($(".totalCost2").text()); 
    var tQty  = 0; 
    var tFinal = 0; 
    var tLast  = 0; 
    var qty  = 0; 
    var totalCost = 0; 
    var cost  = new Array(); 
    var qtyCost = new Array(); 

    $("#txtItems2").attr('disabled','disabled'); 
    $("#btnReset2").attr('disabled','disabled'); 
    $("#uploadItems").attr('disabled','disabled'); 
    $("#startUpload").attr('disabled','disabled'); 

    $(".plus").each(function(){ 
     if (isEmpty($(this).val())) { 
      $(this).val('0.00'); 
     } 
     if (!$.isNumeric($(this).val())) { 
      alert("Only numeric values are allowed in '" + $(this).parent().parent().find('th').text() + "' field."); 
      return false; 
     } 
     plus += parseInt($(this).val()); 
    }); 

    $(".qty").each(function() { 
     qtyCost.push(parseInt($(this).text())); 
     tQty += parseInt($(this).text()); 
    }); 

    $(".cost").each(function() { 
     cost.push($(this).text()); 
    }); 

    tFinal = plus + tCost; 
    tLast = tFinal/tQty; 

    var qty = 0; 

    $(".cost").each(function(){ 
     qty = parseInt($(this).parent().parent().find($(".qty")).text()); 
     $(this).text(tLast * qty * conv); 
     qty = 0; 
    }); 

    for (var i = 0; i < cost.length; i++) 
    { 
     totalCost += (cost[i] * qtyCost[i]); 
    } 

    $(".totalCost").text(totalCost.toFixed(2)); 
} 

Tous conseille ?

+0

Cela fonctionne bien pour moi: http://jsfiddle.net/8ukL69r3/ Bien sûr, la logique de l'événement ne fonctionne pas car il me manque d'autres parties de votre code, mais l'événement se déclenche comme il est censé le faire. – Anders

+0

Je vois que ça marche normalement tout seul, mais pour mon morceau de code ce n'est pas le cas! – CairoCoder

+0

Stack Overflow n'est pas un service de débogage. Vous ne pouvez pas simplement vider tout votre code. S'il vous plaît lire [MCVE]. Vous devez fournir un exemple * minimal *. – Anders

Répondre

0

J'ai trouvé le problème, je dois recalcule le ".cost" après l'avoir modifié, pas avant, comme ceci:

$(".cost").each(function(){ 
     qty = parseInt($(this).parent().parent().find($(".qty")).text()); 
     var newCost = tLast * qty * conv; 
     $(this).text(newCost); 
     qty = 0; 
}); 

$(".cost").each(function() { 
    cost.push($(this).text()); 
}); 
0

Effectuez les opérations suivantes

$('.conv').on("input", function() { 
    //do what you need to do here 
}); 

Quelque chose comme this

+0

Même problème, je dois appuyer sur une autre touche! – CairoCoder