【问题标题】:strange jQuery textbox issue奇怪的 jQuery 文本框问题
【发布时间】:2017-10-27 12:47:24
【问题描述】:

我这辈子都想不通。我有两个 javascript 函数 (jQuery) 使用后面的 vb.net 代码链接到按钮,如下所示:

Button_NewProgram.Attributes.Add("OnClick", "return NewProgramEdits();")
Button_SaveSchedule.Attributes.Add("OnClick", "return ScheduleEdits()")

这两个按钮都是带有母版页的内容页的一部分,内容中没有正文或表单标签,只是一个没有设置 id 的表格。两个 javascript 函数几乎都是精确的,但由于某种原因,执行方式非常不同。我知道他们开火是因为我看到了警报,我使用的是 IE v11。我没有错误。功能是:

我为 document.ready() 中的所有文本框设置了掩码

$("#<%=Inputmask_RegFee1.ClientID%>").inputmask("999");
$("#<%=Inputmask_RegFee2.ClientID%>").inputmask("999");
$("#<%=Inputmask_RegFee3.ClientID%>").inputmask("999");
$("#<%=Inputmask_RegFee4.ClientID%>").inputmask("999");
$("#<%=Inputmask_RegFee5.ClientID%>").inputmask("999");
$("#<%=Inputmask_RegFee6.ClientID%>").inputmask("999");
$("#<%=Inputmask_RegFee7.ClientID%>").inputmask("999");
$("#<%=Inputmask_RegFee8.ClientID%>").inputmask("999");
$("#<%=Inputmask_RegFee9.ClientID%>").inputmask("999");
$("#<%=Inputmask_RegFee10.ClientID%>").inputmask("999");    
$("#<%=Inputmask_Fee1.ClientID%>").inputmask("999");
$("#<%=Inputmask_Fee2.ClientID%>").inputmask("999");
$("#<%=Inputmask_Fee3.ClientID%>").inputmask("999");
$("#<%=Inputmask_Fee4.ClientID%>").inputmask("999");
$("#<%=Inputmask_Fee5.ClientID%>").inputmask("999");
$("#<%=Inputmask_Fee6.ClientID%>").inputmask("999");
$("#<%=Inputmask_Fee7.ClientID%>").inputmask("999");
$("#<%=Inputmask_Fee8.ClientID%>").inputmask("999");
$("#<%=Inputmask_Fee9.ClientID%>").inputmask("999");
$("#<%=Inputmask_Fee10.ClientID%>").inputmask("999");

' This one works, yet the alert shows nothing for the value of fee1 
' and programname yet returns the correct response as all the fees
' are zero and the program IS set to a value ("test').  Strange.

function NewProgramEdits() {
    var fee1 = $('#<%=Inputmask_Fee1.ClientID%>').val().replace(/_/g, "");
    alert("New Program Fee 1 = ") + fee1;
    var fee2 = $('#<%=Inputmask_Fee2.ClientID%>').val().replace(/_/g,"");
    var fee3 = $('#<%=Inputmask_Fee3.ClientID%>').val().replace(/_/g,"");
    var fee4 = $('#<%=Inputmask_Fee4.ClientID%>').val().replace(/_/g,"");
    var fee5 = $('#<%=Inputmask_Fee5.ClientID%>').val().replace(/_/g,"");
    var fee6 = $('#<%=Inputmask_Fee6.ClientID%>').val().replace(/_/g,"");
    var fee7 = $('#<%=Inputmask_Fee7.ClientID%>').val().replace(/_/g,"");
    var fee8 = $('#<%=Inputmask_Fee8.ClientID%>').val().replace(/_/g,"");
    var fee9 = $('#<%=Inputmask_Fee9.ClientID%>').val().replace(/_/g,"");
    var fee10 = $('#<%=Inputmask_Fee10.ClientID%>').val().replace(/_/g,"");
    var newprogram = $('#<%=TextBox_NewProgram.ClientID%>').val().toUpperCase();
    alert("Program Name = ") + newprogram;

    if (newprogram == '') {
        alert('Enter the program name.');
        $('#<%=TextBox_NewProgram.ClientID%>').focus();
       return false;
    } else if (fee1 == '0' && fee2 == '0' && fee3 == '0' && fee4 == '0' && fee5 == '0' && fee6 == '0' && fee7 == '0' && fee8 == '0' && fee9 == '0' && fee10 == '0') {
        alert('You must enter at least one fee value for a new program, they cannot all be zero.');
        $('#<%=Inputmask_Fee1.ClientID%>').focus();
        return false;
    } else {
        return true;
    }
}

由于某种原因,这个不起作用:

    ' The alerts show nothing or empty string even though 
    ' the default values for the textboxes is ALWAYS zero, 
    ' the replace code replaces the mask character with an empty string
    ' the actual value of ALL the textboxes is "0__" (two underscores)

function ScheduleEdits() {
    var regfee1 = $('#<%=Inputmask_RegFee1.ClientID%>').val().replace(/_/g, "");
    var regfee2 = $('#<%=Inputmask_RegFee2.ClientID%>').val().replace(/_/g, "");
    var regfee3 = $('#<%=Inputmask_RegFee3.ClientID%>').val().replace(/_/g, "");
    var regfee4 = $('#<%=Inputmask_RegFee4.ClientID%>').val().replace(/_/g, "");
    var regfee5 = $('#<%=Inputmask_RegFee5.ClientID%>').val().replace(/_/g, "");
    var regfee6 = $('#<%=Inputmask_RegFee6.ClientID%>').val().replace(/_/g, "");
    var regfee7 = $('#<%=Inputmask_RegFee7.ClientID%>').val().replace(/_/g, "");
    var regfee8 = $('#<%=Inputmask_RegFee8.ClientID%>').val().replace(/_/g, "");
    var regfee9 = $('#<%=Inputmask_RegFee9.ClientID%>').val().replace(/_/g, "");
    var regfee10 = $('#<%=Inputmask_RegFee10.ClientID%>').val().replace(/_/g, "");
    var programtype = $('#<%=RadioButtonList_RegFeeMethod.ClientID%>').val().toUpperCase();

    alert("Fee 1 = ") + regfee1;
    alert("Program Type = ") + programtype;

    if (programtype == 'SCHEDULE' && regfee1 == '0' && regfee2 == '0' && regfee3 == '0' && regfee4 == '0' && regfee5 == '0' && regfee6 == '0' && regfee7 == '0' && regfee8 == '0' && regfee9 == '0' && regfee10 == '0') {
        alert('You must enter at lease one fee value for the schedule program.');
        $('#<%=Inputmask_RegFee1.ClientID%>').focus();
        return false;
    } else {
        return true;
    }
}

注意:为单选按钮列表添加了标记

<asp:RadioButtonList ID="RadioButtonList_RegFeeMethod" runat="server" RepeatDirection="Horizontal">
    <asp:ListItem Value="SCHEDULE">Schedule</asp:ListItem>
    <asp:ListItem Value="PROGRAM">Program</asp:ListItem>
    <asp:ListItem Value="ZEROFEE">Zero Fee</asp:ListItem>
</asp:RadioButtonList>

【问题讨论】:

  • 您是否注意到警报无法编译? alert("Fee 1 = ") + regfee1; 复制到这里是不是打错字了?
  • 我没有收到任何错误,我一直使用该代码来显示 var 值。
  • 警报应该是alert("Fee 1 = " + regfee1);
  • 大声笑.. duh ...当然...哇,这真是脑残,我看了好几个小时。好的,现在警报显示 fee1 的值,但程序类型为空或空字符串,即使进行了选择。即使所有值都为零,该函数仍然返回 true。
  • 你需要像这样获取单选按钮的值: var radioVal = $("#").prop("checked");该函数返回 true,因为 programtype 永远不会等于 SCHEDULE,因为您没有正确获取单选按钮的值。您需要检查 SCHEDULE 的单个按钮以查看它是否已被选中并在您的情况下使用它。

标签: javascript jquery html asp.net vb.net


【解决方案1】:

考虑以下代码:

<asp:RadioButtonList ID="RadioButtonList_RegFeeMethod" runat="server" RepeatDirection="Horizontal">
    <asp:ListItem Value="SCHEDULE">Schedule</asp:ListItem>
    <asp:ListItem Value="PROGRAM">Program</asp:ListItem>
    <asp:ListItem Value="ZEROFEE">Zero Fee</asp:ListItem>
</asp:RadioButtonList>

要获取所选单选检查的值,您需要使用$("#ID input:checked") 来捕获正确的元素。这看起来像:

var programtype = $("#<%=RadioButtonList_RegFeeMethod.ClientID%> input:checked").val();

这应该选择正确的&lt;input&gt; 元素并允许您访问它的value 属性。

【讨论】:

    【解决方案2】:
    <input name="rdSchedule" type="radio" id="rdSchedule" value="SCHEDULE" />&nbsp;
    <label>Schedule</label>&nbsp;&nbsp;                    
    <input name="rdProgram" type="radio" id="rdProgram" value="PROGRAM" />&nbsp;
    <label>Program</label>
    <input name="rdZeroFee" type="radio" id="rdZeroFee" value="ZEROFEE" />&nbsp;
    <label>Zero Fee</label>
    
    <script type="text/javascript">
    function ScheduleEdits() {
        var regfee1 = $('#<%=Inputmask_RegFee1.ClientID%>').val().replace(/_/g, "");
        var regfee2 = $('#<%=Inputmask_RegFee2.ClientID%>').val().replace(/_/g, "");
        var regfee3 = $('#<%=Inputmask_RegFee3.ClientID%>').val().replace(/_/g, "");
        var regfee4 = $('#<%=Inputmask_RegFee4.ClientID%>').val().replace(/_/g, "");
        var regfee5 = $('#<%=Inputmask_RegFee5.ClientID%>').val().replace(/_/g, "");
        var regfee6 = $('#<%=Inputmask_RegFee6.ClientID%>').val().replace(/_/g, "");
        var regfee7 = $('#<%=Inputmask_RegFee7.ClientID%>').val().replace(/_/g, "");
        var regfee8 = $('#<%=Inputmask_RegFee8.ClientID%>').val().replace(/_/g, "");
        var regfee9 = $('#<%=Inputmask_RegFee9.ClientID%>').val().replace(/_/g, "");
        var regfee10 = $('#<%=Inputmask_RegFee10.ClientID%>').val().replace(/_/g, "");
    
        var progTypeSched = $("#rdSchedule").prop("checked");
    
        alert("Fee 1 = " + regfee1);
        alert("Program Type = " + programtype);
    
        if (progTypeSched && regfee1 == '0' && regfee2 == '0' && regfee3 == '0' && regfee4 == '0' && regfee5 == '0' && regfee6 == '0' && regfee7 == '0' && regfee8 == '0' && regfee9 == '0' && regfee10 == '0') {
            alert('You must enter at lease one fee value for the schedule program.');
            $('#<%=Inputmask_RegFee1.ClientID%>').focus();
            return false;
        } else {
            return true;
        }
    }
    </script>
    

    【讨论】:

    • 虽然我确信这段代码可以工作,但不幸的是,我仍然坚持使用 RadioButtonList。
    • 可以理解。试试这个漂亮的解决方案来解决使用 jQuery 的 RBL 限制:stackoverflow.com/questions/308301/… GL!
    • 如果我没有被警报缠绕在车轴上,我可能已经发现了这个。我一直在问错误的问题...大声笑...
    猜你喜欢
    • 1970-01-01
    • 2011-08-17
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    相关资源
    最近更新 更多