jQuery从变量中获取NaN和[object Object]

时间:2015-02-11 21:29:35

标签: javascript jquery forms function nan

我的脚本工作有些问题。我的脚本计算订单数量和每个订单的重量。当按下“新行”按钮时,我的表单实际上是由javascript创建的。我试图这样做,每当3个值(项目数,一个框中的项目数,每个订单的框数)填写时,它会自动为您提供订单总数。此外,当给定单个物品的重量时,它会为您提供订单的总重量。所有这些都发生在使用jquery的keyup上。我只需要javaScript部分的帮助。我稍后使用AJAX处理我的表单并且一切正常但是当我尝试实现它时它就崩溃了。

每当我使用alert()查看我的代码分配给updateForm()函数的值时,我会获得警报($ totalitems) - > [object Object]和alert($ weightperpal) - > NaN的。有人可以帮我解决这个问题吗?继承我的代码:

HTML:

<button id="addLine" type="submit" class="btn red">Add Line</button>

JavaScript的:

$("#addLine").click(function(e){
    e.preventDefault();
    lineNum++;

    var cont = '<div class="control-group">'+
        '<label class="control-label">Total # of items</label>'+
        '<div class="controls">'+
        '<input type="text" placeholder="" class="m-wrap medium orderField" name="totalitems'+lineNum+'" id="totalitF" no="'+ lineNum +'"/>'+
        '<span class="help-inline" style="font-size:10px; font-style:italic;">Not mandatory</span>'+
        '</div>'+
        '</div>'+
        '<div class="control-group">'+
        '<label class="control-label">Items per box</label>'+
        '<div class="controls">'+
        '<input type="text" placeholder="0" class="m-wrap medium orderField" name="ipb'+lineNum+'" id="itemspbF" no="'+ lineNum +'"/>'+
        '<span class="help-inline" style="font-size:10px; font-style:italic;">#</span>'+
        '</div>'+
        '</div>'+
        '<div class="control-group">'+
        '<label class="control-label">Boxes per order</label>'+
        '<div class="controls">'+
        '<input type="text" placeholder="0" class="m-wrap medium orderField" name="bpp'+lineNum+'" id="boxesppF" no="'+ lineNum +'"/>'+
        '<span class="help-inline" style="font-size:10px; font-style:italic;">#</span>'+
        '</div>'+
        '</div>'+
        '<div class="control-group">'+
        '<label class="control-label">Weight per Item</label>'+
        '<div class="controls">'+
        '<input type="text" placeholder="0" class="m-wrap medium orderField" name="wpi'+lineNum+'" id="weightpiF" no="'+ lineNum +'"/>'+
        '<span class="help-inline" style="font-size:10px; font-style:italic;">#</span>'+
        '</div>'+
        '</div>'+
        '<div class="control-group">'+
        '<label class="control-label">Total number of Orders</label>'+
        '<div class="controls">'+
        '<input type="text" placeholder="" class="m-wrap medium orderField" name="pallets'+lineNum+'" id="palletsF" no="'+ lineNum +'"/>'+
        '<span class="help-inline" style="font-size:10px; font-style:italic;"># of pallets</span>'+
        '</div>'+
        '</div>'+
        '<div class="control-group">'+
        '<label class="control-label">Weight per order</label>'+
        '<div class="controls">'+
        '<input type="text" placeholder="" class="m-wrap medium orderField" name="wpp'+lineNum+'" id="weightppF" no="'+ lineNum +'"/>'+
        '<span class="help-inline" style="font-size:10px; font-style:italic;">Total number of boxes</span>'+
        '</div>'+
        '</div>'+
        '</div>';

    $(document).on('keyup','.weightpiF',function(){
        var valueField = $(this).attr('no');
        updateFormRoe(valueField);
    });
    $(document).on('keyup','.weightppF',function(){
        var valueField = $(this).attr('no');
        updateFormRoe(valueField);

    });
    $(document).on('keyup','.itemspbF',function(){
        var valueField = $(this).attr('no');
        updateFormRoe(valueField);
    });
    $(document).on('keyup','.boxesppF',function(){
        var valueField = $(this).attr('no');
        updateFormRoe(valueField);
    });

    function updateFormRoe(number){
        alert(number);
        var $totalitems = $('#totalitF'+number);
        alert($totalitems);
        var $itemspb = $('#itemspbF'+number).val();

        var $boxespp = $('#boxesppF'+number).val();

        var $weightperitem = $('#weightpiF'+number).val();

        var $itemsinpallet = $itemspb * $boxespp;

        var $totalpals = $totalitems / $itemsinpallet;

        var $weightperpal = ($itemsinpallet) * $weightperitem;
        alert($weightperpal);
        if($totalitems !== '' && $itemspb !== '' && $boxespp !== ''){
            if($totalpals == Infinity){
                $('#palletsF'+number).val('0');
            }else{
                $('#palletsF'+number).val($totalpals);  
            }

            $('#weightppF'+number).val($weightperpal);
        }
    }

提前致谢!

1 个答案:

答案 0 :(得分:2)

$('#totalitF'+number)之类的选择器都不起作用,因为您不会在ID上附加数字。而不是:

id="totalitF" no="'+ lineNum +'"/>'

它应该是:

id="totalitF'+ lineNum +'" data-no="'+ lineNum +'"/>'

您不应该创建自己的属性。如果要向元素添加其他属性,请使用data-属性。然后在jQuery中,您可以将其作为

进行访问
$(this).data('no')

获取价值。在您的其他功能中使用此代替$(this).attr('no')