Javascript模块模式值在警报中显示为未定义

时间:2014-07-16 15:21:47

标签: javascript jquery html design-patterns module

我希望Amont文本框中的费率和qunatity的结果接近金额按钮,但它在文本框中显示0,当提示值显示未定义时,任何人都可以帮助我,我在javascript的非常初级...任何帮助将不胜感激。

这是我的HTML

 <form method="POST">
 <pre>
    <label>Item id :  </label><input type="text" name="" id="txt_Item_id"><br>
    <label>Catogeory :</label><input type="text" name="" id="txt_Cato_geory"><br>
    <label>Quantity : </label><input type="text" name="" id="txt_Quan_tity"><br>
    <label>Rate :     </label><input type="text" name="" id="txt_Ra_te"><br>
    <input type="text" name="" id="txt_Amo_unt"> <input type="button" value="Amount" id="btn_T_Amount"><br>

    <label>Discount : </label><input type="text" name="" id="txt_Disc_ount"><br>
    <input type="text" name="" id="txt_Net"><input type="button" name="" id="btn_Net" value="Net"><br>
    <input type="button" value="+" id="btn_add"><br>
 </pre>
</form>
<table id="MyTable" border="1px solid black">
    <thead>
        <tr>
            <th>Sr#</th>
            <th>Catogeory</th>
            <th>Quantity</th>
            <th>Rate</th>
            <th>Amount</th>
            <th>%</th>
            <th>Discount</th>
            <th>Net</th>
            <th>Action</th>
        </tr>
    </thead>
    <tbody>
    </tbody>

</table>

Javascript是

 $(document).ready(function(){
    var calc = new calculate();
    calc.rate();
    calc.discount();
    });

var calculate = function(){
    var txt_quantity = $('#txt_Quan_tity').val();
    var txt_rate     = $('#txt_Ra_te').val();
    var txt_Amount   = $('#txt_Amo_unt').val();
    var txt_discount = $('#txt_Disc_ount').val()/100;
    var txt_net      = $('#txt_Net').val();
    debugger
    var total_amount = txt_quantity * txt_rate;   // Total
    var total_net    = txt_discount * txt_Amount;   
    return{
        rate   : function(){
            $('#txt_Ra_te').on('input',function(){
                alert(txt_rate);
                // $('#txt_Amo_unt').val(total_amount);         

            });
        },   // End Rate Function
        discount : function(){
            $('#txt_Disc_ount').on('input',function(){

                // $('#txt_Net').val(total_net);

            });
        }

    };

};

1 个答案:

答案 0 :(得分:1)

请记住,您将变量calculate设置为以下内容:

return{
    rate   : function(){
        $('#txt_Ra_te').on('input',function(){
            alert(calculate.txt_rate);
            // $('#txt_Amo_unt').val(total_amount);         

        });
    },   // End Rate Function
    discount : function(){
        $('#txt_Disc_ount').on('input',function(){

            // $('#txt_Net').val(total_net);

        });
    }

};

现在看一下你的alert。您正在尝试访问未在该return语句中定义的内容。 calculate对函数表达式内部的内容一无所知。它只知道从它返回的内容。

要修复,只需从警报中删除calculate.,因为您没有从变量calculate内部访问某些内容,而是定义了一个闭包。

解决方案:alert(txt_rate);