Javascript的Onfocus()事件不计算文本框值

时间:2013-11-29 21:04:24

标签: c# javascript asp.net

在我的asp.net网站中,我试图将两个文本框值相乘并将其存储到另一个文本框中。但是,我的代码不起作用

JS:

<script language="javascript">
function myFunction(x)
{
var x = document.getElementById("<%=u_price1.ClientID %>") * document.getElementById("<%=qty1.ClientID %>");
return x;
}
</script>

文本框:

<asp:TextBox ID="u_price1" runat="server" Width="63px" CssClass="txt1">0</asp:TextBox>

<asp:TextBox ID="qty1" runat="server" Width="63px" CssClass="txt1">0</asp:TextBox>

<asp:TextBox ID="amt1" runat="server" Width="81px" CssClass="txt1" onfocus="myFunction(this)"></asp:TextBox>

请告诉我,我在这里做错了什么。

4 个答案:

答案 0 :(得分:3)

我突然想到的是你正在使用乘法运算符(*)来对抗两个DOM元素,这两个元素将返回NaN。也就是说,

document.getElementById("<%=u_price1.ClientID %>")

返回一个对象,而不是该文本框内容的数值。我认为你想要做的是获取文本框的

var x = document.getElementById("<%=u_price1.ClientID %>").value *
    document.getElementById("<%=qty1.ClientID %>").value;

如果你想要真正防守,你可以检查以确保它们是有效数字:

var price = Number( document.getElementById("<%=u_price1.ClientID %>").value );
var qty = Number( document.getElementById("<%=qty1.ClientID %>").value );

然后你可以检查以确保它们是有效数字:

if( isNaN( price ) || isNaN( qty ) ) {
    // take appropriate error handling action here
}

但是,您的脚本可能还有其他事情发生。我会在console.log内放myFunction以确保它甚至被调用。如果它没有被调用,那么其他东西是错误的,但你必须解决对象乘法问题。

答案 1 :(得分:2)

function myFunction(x) {
    var price = parseFloat(document.getElementById("<%=u_price1.ClientID %>").value) || 0,
        qty = parseInt(document.getElementById("<%=qty1.ClientID %>").value, 10) || 0;
    x.value = price * qty.
}
  1. 您需要两个节点相乘,而您需要值。
  2. 您需要将字符串值转换为数字。
  3. 您需要保存计算结果

答案 2 :(得分:0)

我在HTML中对其进行了验证,并且工作正常。

<html>
<body>
<input type="text" id="first"></input>
<input type="text" id="second"></input>
<input type="text" id="result" onfocus="myFunction(this)"></input>

<script type="text/javascript">
function myFunction(x){
var price = parseFloat(document.getElementById("first").value) || 0,
        qty = parseInt(document.getElementById("second").value, 10) || 0;
    x.value = price * qty;
}
</script>

</body>
</html>

如果您仍有问题,可以验证并告诉我。

这是ASP.NET代码:

我们需要为TextBox元素设置ClientIDMode = Static,以便在javascript中访问其字段,否则将更改其ID。

<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
 <asp:TextBox runat="server" ID="txtinput1" ClientIDMode="Static"></asp:TextBox>
 <asp:TextBox runat="server" ID="txtinput2" ClientIDMode="Static"></asp:TextBox>
 <asp:TextBox runat="server" ID="txtresult" onfocus="myFunction(this)"></asp:TextBox>


    <script type="text/javascript">
        function myFunction(x) {
            var price = parseFloat(document.getElementById("txtinput1").value) || 0,
                    qty = parseInt(document.getElementById("txtinput2").value, 10) || 0;
            x.value = price * qty;
        }
    </script>

</asp:content>

如果这有帮助,请告诉我。我使用了onfocus,它也适用于onblur。

答案 3 :(得分:0)

you can try this solution...     
<script language="javascript">
        function myFunction()
        {
         var u_price1 = parseInt(document.getElementById("u_price1").value);
         var qty1= parseInt(document.getElementById("qty1").value);
         var x = u_price1 * qty1;
         document.getElementById("amt1").value = x;
        }
        </script>

        <html>
        <body>
        <input type="text" ID="u_price1" name="u_price1"  Width="63px" CssClass="txt1"/>
        <input type="text"  ID="qty1" name="qty1" Width="63px" CssClass="txt1"/>
        <input type="text"  ID="amt1" name="amt1" Width="81px" CssClass="txt1" onfocus="myFunction()"/>
        </body>
        </html>