为什么jQuery如果条件不起作用?

时间:2013-03-11 05:10:16

标签: jquery conditional-statements

我试图通过除以获得的标记* 100 /总标记来显示第三个文本框中的值; 但我无法做到这一点;

        $(document).ready(function () {
            $("#TextBoxTotalMarks, #TxBx_MarksObtained").keyup(function () {
                var a = parseInt($("#TextBoxTotalMarks").val(), 10);
                var b = parseInt($("#TxBx_MarksObtained").val(), 10);
                var c;
                if (a < b) {
                   c = "sorry not accepted";
                }
                else {
                   c = ((b * 100) / a).toFixed(2);
                }
                $("#TextBoxMarksInPercent").val(c);
            });
        });

当我在总标记文本框中输入类似100的内容而在获得标记的文本框中输入300时,我看不到消息“抱歉未被接受”

  <tr>
                <td class="shade">
                    <asp:Literal ID="Ltrl_TotalMarks" runat="server" Text="Total Marks"></asp:Literal>
                </td>
                <td>
                    <asp:TextBox ID="TextBoxTotalMarks" runat="server" />
                </td>
            </tr>
            <tr>
                <td class="shade">
                    <asp:Literal ID="Ltrl_MarksObtained" runat="server" Text="Marks Obtained"></asp:Literal>
                </td>
                <td>
                    <asp:TextBox ID="TxBx_MarksObtained" runat="server" 
                </td>
            </tr>
            <tr>
                <td class="shade">
                    <asp:Literal runat="server" ID="Lit_MarksInPercent" Text="Marks In Percent"></asp:Literal>
                </td>
                <td>
                    <asp:TextBox runat="server" ID="TextBoxMarksInPercent" />
                    <span style="color: black;">%</span>
                </td>
            </tr>

3 个答案:

答案 0 :(得分:7)

更新(截至显示标记时)

问题在于,您ID asp:TextBox不是客户端 ID。为此,您需要使用其ClientID property,例如:

var a = parseInt($("#<%=TextBoxTotalMarks.ClientID%>").val(), 10);

原始回答

我认为lc.'s answer可能是主要问题 (不是自编辑以来),还有其他两件事:

  1. 请注意,您要比较字符串(因此"100"将为< "30")。如果您要比较数字,请对parseInt的返回值使用val

    var a = parseInt($("#TextBoxTotalMarks").val(), 10);
    var b = parseInt($("#TxBx_MarksObtained").val(), 10);
    

    然后你可能想稍微改变你的状况:

    if (isNaN(a) || isNaN(b) || a < b) {
    
  2. 请注意,TextBoxTotalMarksTxBx_MarksObtained应为id值,而不是name值。所以你的输入应该是这样的:

    <input type="text" id="TextBoxTotalMarks">
    <input type="text" id="TxBx_MarksObtained">
    <input type="text" id="TextBoxMarksInPercent">
    

    或者,如果您想使用name,请将您的选择器更改为input[name="TextBoxTotalMarks"]类似的形式。

  3. 如果涵盖了这两个方面,它可以运作:Live Example | Source (我认为您的计算存在问题)

答案 1 :(得分:4)

也许您打算将事件处理程序附加到#TextBoxTotalMarks

    $("#TextBoxTotalMarks, #TxBx_MarksObtained").keyup(function () {
       ~~~~~~~~~~~~~~~~~~

如果您仍然遇到问题,可以随时设置断点并检查您为ab获取的内容。问题很可能是T.J. Crowder's answer解释的字符串比较问题。

答案 2 :(得分:0)

你有问题:

$("#TxBx_MarksObtained, #TxBx_MarksObtained")
//--^^^^-----------------^^^^-------------------using same selector twice.

我认为这应该是:

 $("#TxBx_MarksObtained, #TextBoxTotalMarks").keyup(function () {

这对我有用:FIDDLE