2015-11-02 5 views
-1

Я пытаюсь активировать событие keyup на входном элементе, проблема в том, что он не срабатывает, как только я нажимаю клавишу, мне нужно сделать еще одно ключевое событие, чтобы активировать его, а это не нормальный!Функция jQuery keyup не работает должным образом

Вот мой код:

$(".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(); 
}); 

Я пытался использовать "на", как это, но не работает:

$('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(); 
}); 

Вычислить функцию доставки:

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)); 
} 

Любой советует ?

+0

Он отлично работает для меня: http://jsfiddle.net/8ukL69r3/ Конечно, логика в этом случае не работает, так как мне не хватает других частей вашего кода, но событие срабатывает, как и предполагалось. – Anders

+0

Я вижу, что это нормально работает один, но для моей части кода это не так! – CairoCoder

+0

Stack Overflow - это не отладочная служба. Вы не можете просто сбросить весь свой код. Пожалуйста, прочитайте [MCVE]. Вы должны указать * минимальный * пример. – Anders

ответ

0

Я нашел эту проблему, я должен пересчитать ".cost" после его модификации, а не до того, как это:

$(".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

Попробуйте следующее

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

Что-то вроде this

+0

Такая же проблема, я должен нажать еще одну клавишу! – CairoCoder

Смежные вопросы