【问题标题】:Store value in hidden field then pass it to email submission via query string将值存储在隐藏字段中,然后通过查询字符串将其传递给电子邮件提交
【发布时间】:2014-09-24 13:41:50
【问题描述】:

我有一些 jQuery 代码,用于从表单中获取用户输入并将其放置在电子邮件正文中。此表单中的一个字段是一个可选的复选框,其 id 和名称为“member”。我有一个隐藏字段(称为“memberChk”),用于根据复选框是否被选中来存储一个值。如果选中该复选框,则隐藏字段应存储字符串值“是”。如果未选中该复选框,则隐藏字段应存储“否”。

好的,我更新了 jQuery 代码,现在无论是否选中复选框,该值始终为“否”。当复选框被选中时,它应该在电子邮件中显示“是”。我错过了什么?

这是复选框和隐藏字段的代码:

<tr><td  colspan="3" valign="top"><input type="checkbox" id="member" name="member" value="Member of the NDGAA, PCSA, or Pet Professional Guild" /> Check if a you are a member of the NDGAA, PCSA, or Pet Professional Guild</td><asp:HiddenField ID="memberChk" runat="server" /></tr>

这是用于设置隐藏字段值的 jQuery 代码:

var member =  $('#memberChk').val();
    member = $('input[name="member"]:checked').size() == 0 ? "No" : "Yes";

这是构建查询字符串的代码部分,用于将表单条目传递给电子邮件提交:

$.ajax({
        type: "GET",
        url: "/Usercontrols/forms/getaquote_processor.aspx",
        data: "FirstName=" + FirstName + "&LastName=" + LastName + "&Email=" + Email + "&Telephone=" + Telephone + "&BusinessName=" + BusinessName + 
            "&Address1=" + Address1 + "&Address2=" + Address2 + "&City=" + City + "&State=" + State + "&ZipCode=" + ZipCode + "&BusinessType=" + BusinessType +
            "&OwnershipType=" + OwnershipType + "&PartnershipName=" + PartnershipName + "&MemberOf=" + MemberOf + "&CurrentInsurance=" + CurrentInsurance +
            "&PolicyExpiration=" + PolicyExpiration + "&AnnualReceipts=" + AnnualReceipts + "&AnnualPayroll=" + AnnualPayroll + "&OwnOrRent=" + OwnOrRent +
            "&ConstructionType=" + ConstructionType + "&YearBuilt=" + YearBuilt + "&BuildingUpdates=" + BuildingUpdates + "&Heating=" + Heating + "&HeatingYear=" + HeatingYear + 
            "&Cooling=" + Cooling + "&CoolingYear=" + CoolingYear + "&Plumbing=" + Plumbing + "&PlumbingYear=" + PlumbingYear + "&Electrical=" + Electrical + "&ElectricalYear=" + ElectricalYear + 
            "&Roofing=" + Roofing + "&RoofingYear=" + RoofingYear + "&Sprinklers=" + Sprinklers + "&PlateGlass=" + PlateGlass +
            "&PlateGlassWidth=" + PlateGlassWidth + "&HomeBusiness=" + HomeBusiness + "&SeperateBuilding=" + SeperateBuilding + "&CostToReplaceBuilding=" + CostToReplaceBuilding +
            "&CostToReplaceContents=" + CostToReplaceContents + "&OwnersCostToReplaceBuilding=" + OwnersCostToReplaceBuilding + "&OwnersSquareFootage=" + OwnersSquareFootage +
            "&NumberOfEmployees=" + NumberOfEmployees + "&NumberOfContractors=" + NumberOfContractors + "&MAddress1=" + MAddress1 + "&MAddress2=" + MAddress2 + "&MCity=" + MCity + 
            "&MState=" + MState + "&MZipCode=" + MZipCode  + "&VehicleMake=" + VehicleMake + "&VehicleModel=" + Model + "&VIN=" + VIN + "&Cab=" + Cab + "&Customization=" + Customization + 
            "&LeaseCompany=" + LeaseCompany + "&DriversName=" + DriversName + "&DriversLicense=" + DriversLicense + "&Birthday=" + BirthDay + "&CageFree=" + CageFree + 
            "&ConstuctionOfRuns=" + ConstructionOfRuns + "&Floors=" + Floors + "&Walls=" + Walls + "&MaxDogs=" + MaxDogs + "&AvgDogs=" + AvgDogs + "&KennelsEnclosed=" + KennelsEnclosed + 
            "&KennelsHeated=" + KennelsHeated + "&FenceNeeded=" + FenceNeeded + "&IsFenceAttached=" + IsFenceAttached + "&FenceReplacementCost=" + FenceReplacementCost + 
            "&FenceSquareFeet=" + FenceSquareFeet + "&RequireVaccinations=" + RequireVaccinations + "&CustomersUnsupervised=" + CustomersUnsupervised + "&Member=" + member + "&Comments=" + comments,

最后但同样重要的是,电子邮件正文中用于显示电子邮件中复选框值的部分:

 #region MEMBERSHIP
        //MEMBERSHIP
        String Member = string.Empty;
        Member = Request.QueryString["Member"];
 #endregion MEMBERSHIP

  #region MEMBERSHIP
        sb.Append("<tr><td colspan=\"2\"><strong>Check if a you are a member of the NDGAA, PCSA, or Pet Professional Guild</strong></td></tr>");
        sb.Append(string.Format("<tr><td colspan=\"2\">{0}</td></tr>", Member));
  #endregion

【问题讨论】:

    标签: jquery asp.net forms checkbox hidden-field


    【解决方案1】:

    试试下面的代码

    // work out the value
    var checkVal = $('input[name="member"]:checked').length === 0 ? "No" : "Yes";
    
    // get the checkbox
    var member =  $('#memberChk');
    
    // set the checkbox value
    member.val(checkVal);
    

    但现在的问题是,您不允许 ASP.NET 将表单发回,因此隐藏字段没有按预期的方式使用,因此我们需要获取它的值。

    var memberVal =  member.val();
    // obviously this step is not required you could just use the raw value we calculate above, 
    // this is added as I don't know the execution flow of your code
    

    另一种方法是使用 onChange 处理程序,例如我在下面的 cmets 中设置的 JSBin

    $('input[name="member"]').on('change', function(e)
    {
      var isChecked = $(this).is(':checked');
      $('#memberChk').val(isChecked ? "Yes" : "No");
    });
    
    // then just get the value when you need it like
    var member =  $('#memberChk').val();
    

    您还知道您可以使用 $('form').serialize() [ http://api.jquery.com/serialize/ ] 来获取所有用于 ajax 调用的表单值,但这需要它们都具有 name 属性?

    【讨论】:

    • 我会试试这个......至于 $('form').serialize() 方法,我不知道,但这也不是我的代码。不知道为什么之前的开发者没有那样做......
    • 好的,我确实尝试了代码,它有效,但检查复选框时,电子邮件提交仍然显示“否”作为响应。 span>
    • 我在这里创建了一个 JSBin jsbin.com/tazafiqejado/1/edit 来演示复选框的检查。
    • 我想通了——你的方法奏效了。我有一个错字,我没看懂。
    猜你喜欢
    • 2014-08-14
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    相关资源
    最近更新 更多