使用.data()设置变量

时间:2014-02-06 17:26:57

标签: javascript jquery selector

我正在尝试使用.data()在表单中设置变量并且无法使其工作,因为我无法获得变量“费用”的任何输出,我只看到一个空白。 理想情况下,用户可以选择类型,输入素材,然后选择25%或50%。每个百分比都与所选类型(hp或lp)的不同数据条目相关联。然后,所选的数据类型将插入data()选择器以提取“费用”的值。我可以得到所有其他变量来显示除此之外的数量,所以我认为这一定是我出错的地方。我不确定我做错了什么,所以任何输入都将不胜感激!谢谢!

这是JSFiddle - http://jsfiddle.net/gv0029/g78bG/2/

HTML:

<select class="pSelectP" id="pPost_D">
    <option value="select">Type</option>
    <option data-hp="5" data-lp="2" value="Type 1">Type 1</option>
</select>
<br/>
<input id="pPost_F" class="pSelectQ" placeholder="Footage" />
<br/>
<select id="pPost_P" placeholder="Percentage">
    <option value="lp">25%</option>
    <option value="hp">50%</option>
</select>
<br/>
<input id="pPost_C" placeholder="Cost" />
<br/>
<input id="pPost_A" placeholder="Total" />

JS:

$(document.body).on('keypress keydown keyup change', '[class="pSelectP"] , [class="pSelectQ"]', function () {
    if ($('#manualOverrideNo').prop('checked')) {
        var parts = $(this).attr('id').split("_"),
            service = parts[0],

            footage = parseFloat($("#" + service + "_F").val(),  
                                 10),
            percentage = $("#" + service + "_P").val(),
            fee = parseFloat($("#" + service + "_D").data("'" + 
                  percentage + "'"), 10),
            cost = $("#" + service + "_C"),


            amount = '',
            finalAmount = '';


        if (isNaN(footage)) {
            total.val("Please enter Quantity");
        }

        if (!isNaN(footage) && (!isNaN(Number(fee)))) {
            amount = Math.ceil(footage * fee);
            total.val(amount);
            cost.val(fee);
        }


    }

});

1 个答案:

答案 0 :(得分:1)

你可能需要调整一些数学,但我认为这对你有用。

$(document.body).on('keypress keydown keyup change', '[class="pSelectP"] , [class="pSelectQ"]', function () {
            var service = $(this).attr('id').split("_")[0],
                footage = parseFloat($("#" + service + "_F").val());
                pricetype = $("#" + service + "_P option:selected").val();
                percentage = parseFloat($('#pPost_D option:selected').data()[pricetype]);
                fee = percentage * footage;

            if (isNaN(footage)) {
                $("#" + service + "_A").val("Please enter Quantity");
            }

            if (!isNaN(footage) && (!isNaN(Number(fee)))) {
                $("#" + service + "_A").val(Math.ceil(fee));
                $("#" + service + "_C").val(fee);
            }
    });