【问题标题】:jQuery in .net validate dropdownlist, fadein and fadeout panels.net 中的 jQuery 验证下拉列表、淡入和淡出面板
【发布时间】:2011-11-04 23:41:44
【问题描述】:

我有一个下拉列表控件 ddlAffilation、一个面板 pnlForms、一个面板 Complete、一个按钮 Submit、一个按钮 Return。

我在下拉列表中有一个验证控件。

这是我的 jquery 代码

<script type="text/javascript">
$(document).ready(function () {
    $("#<%= Submit.ClientID %>").click(function () {
        $("#<%= pnlForms.ClientID %>").fadeOut('slow');
        $("#Complete").delay(800).fadeIn('slow');

    });
    $("#<%= Return.ClientID %>").click(function () {
        $("#Complete").fadeOut('slow');
        $("#<%= pnlForms.ClientID %>").delay(800).fadeIn('slow');
    });
});
</script>

我有两个问题: 1) 使用这个 jQuery 代码,只有当我没有在下拉列表框中选择任何值时,我才能来回切换(淡出 pnlForms,点击提交时淡入完成,反之亦然)。如果我在下拉列表中选择任何值,Return 按钮将不起作用。

2) jquery 代码绕过 .net 服务器验证控制。如果没有从下拉列表中选择任何值,我需要代码不做任何事情。我试过了

var isValid = true;
if ($("#<%= ddlAffilation.ClientID %>").val() == "") {
    isValid = false;
    return false;
}

if (isValid == true) {
...

但它不起作用。最好的方法是什么?

谢谢,

================================================ ====================================

我无法为自己的问题添加答案,所以我在这里回复约翰:

谢谢约翰。我有这样的代码,它解决了问题 2。

<script type="text/javascript">
    $(document).ready(function () {
        $("#<%= Submit.ClientID %>").click(function (e) {
            if (IsValid() == false) {
                e.preventDefault();
                return false;
            }
            else {
                $("#<%= pnlForms.ClientID %>").fadeOut('slow');
                $("#Complete").delay(800).fadeIn('slow');
            }
        }); 
        $("#<%= Return.ClientID %>").click(function () {
            alert('blah2');
            $("#Complete").fadeOut('slow');
            $("#<%= pnlForms.ClientID %>").delay(800).fadeIn('slow');
        });
        function IsValid() {
            // Add any other validation in here
            if ($("#<%= ddlAffilation.ClientID %>").val() == "") {
                return false;
            }
            return true;
        }
    });
</script>

但是,问题 1 仍然存在。让我澄清一下。我有几个文本框、一个下拉列表和一个提交按钮来收集用户的反馈。它们都在面板 pnlForms 中。

除下拉列表外,所有控件都可以为空。我们使用您的代码和服务器验证控件解决了这个问题。

当用户单击提交按钮时,我希望 pnlForms 淡出,一个名为 pnlComplete 的隐藏面板淡入。 pnlComplete 有一个文本说感谢反馈和一个名为 Return 的按钮,让用户可以发送另一个反馈。

当用户点击返回按钮时,这里会发生相反的情况。 pnlComplete fadeOut 和 pnlForms fadeIn。

提交按钮效果很好,但返回按钮根本不起作用。我在 Return.click( 函数中设置了一些 alert() 但它没有命中。

有什么想法吗?


这是整个页面的代码。

<%@ Page Title="" Language="C#" MasterPageFile="~/Master.master" 
    AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default" %>

<asp:Content ID="Content1" ContentPlaceHolderID="content" runat="Server">
        <asp:UpdatePanel ID="pnlForms" runat="server">
            <ContentTemplate>
                <fieldset>
                    <legend>Your Information</legend>
                    <ol>
                        <li>
                            <label for="ctl00_content_name">
                                Your Name:</label>
                            <asp:TextBox ID="Name" runat="server" Width="150px"></asp:TextBox>
                            <em class="optional">Optional </em></li>
                        <li>
                            <label for="ctl00_content_status">
                                Your Affiliation:*</label>
                            <asp:DropDownList ID="ddlAffilation" runat="server" Width="155px">
                                <asp:ListItem Text="--Select One--" Value="" Selected="True" />
                                <asp:ListItem>F</asp:ListItem>
                                <asp:ListItem>S</asp:ListItem>
                                <asp:ListItem>T</asp:ListItem>
                            </asp:DropDownList>
                            <em class="required">Required
                                <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage=" - Please select your affiliation"
                                    ControlToValidate="ddlAffilation" SetFocusOnError="True" ForeColor=""></asp:RequiredFieldValidator>
                            </em></li>
                    </ol>
                </fieldset>
                <div style="text-align: center;">
                    <asp:Button ID="Submit" runat="server" Text="Submit" OnClick="submit_Click" /></div>
            </ContentTemplate>
        </asp:UpdatePanel>
    <div id="Complete" style="display: none;">
        <asp:UpdatePanel ID="pnlComplete" runat="server">
            <ContentTemplate>               
                    <p>Thank you</p>
                <div style="text-align: center;">
                    <asp:Button ID="Return" runat="server" Text="Return" /></div>
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>
</asp:Content>
<asp:Content ID="Content3" runat="server" ContentPlaceHolderID="cpClientScript">
    <script type="text/javascript">
        $(document).ready(function () {
            $("#<%= Submit.ClientID %>").click(function (e) {
                if (IsValid() == false) {
                    e.preventDefault();
                    return false;
                }
                else {
                    $("#<%= pnlForms.ClientID %>").fadeOut('slow');
                    $("#Complete").delay(800).fadeIn('slow');
                }
            });
            $("#<%= Return.ClientID %>").click(function () {
                $("#Complete").fadeOut('slow');
                $("#<%= pnlForms.ClientID %>").delay(1000).fadeIn('slow');
            });
            function IsValid() {
                // Add any other validation in here
                if ($("#<%= ddlAffilation.ClientID %>").val() == "") {
                    return false;
                }
                return true;
            }
        });
    </script>
</asp:Content>

【问题讨论】:

  • 可以为返回按钮添加渲染输出吗?

标签: c# jquery asp.net .net


【解决方案1】:

我不确定我是否正确阅读了您的问题,但如果您的问题是您不希望 jquery 继续触发并在下拉列表为空时允许表单提交,请执行以下操作:

不要将.click 事件附加到您的按钮,而是将.submit 事件附加到您的表单。然后你想使用e.PreventDefault() 来停止主提交执行,如果它无效

例如:

$("#FORMNAME").submit(function(e) {
    if (IsValid() == false) {
        e.preventDefault();
        return false;
    }
    // Submitting form...
}


function IsValid() {
    // Add any other validation in here
    if ($("#<%= ddlAffilation.ClientID %>").val() == "") {
        return false;
    }
    return true;
}

此外,您应该始终在进行客户端验证的同时进行服务器验证。否则,其他人所要做的就是直接提交/绕过您的 javascript 检查

编辑您的编辑: 返回按钮是动态创建的还是在页面加载时创建的?如果它是动态的,它可能永远不会被分配到您的 jquery 中,因为它在运行时不存在。

您可以尝试以下快速测试:

var returnButton = $("#<%= Return.ClientID %>");
alert(returnButton.attr("id");

如果您没有取回返回按钮的 ID,则它在您的代码中不匹配,这就是您的点击事件不起作用的原因。如果是这种情况,请在您的页面上查看源代码并找出实际的返回按钮 ID 设置为(使用 FireBug 或类似工具更容易)

【讨论】:

  • 我为您的编辑添加了更多内容,听起来返回按钮 ID 与您想象的不同,或者由于某种原因它没有在 JQuery 中连接它(在 js 运行后动态创建?)
  • 第一次加载页面时我得到了返回按钮的ID,但点击提交按钮后我没有(即返回按钮淡入时)
  • 如果您将返回按钮移动到不同的位置以使其在开始时可见,它会触发警报事件吗?如果是这样,则必须对其进行修改或导致 javascript 中的错误在提交按钮事件触发后无法运行进一步的事件。尝试添加第三个按钮,通过基本单击始终可见 -> 警报并运行 3 次,单击提交前 2 次,单击后运行 1 次。查看是否全部 3 次触发(之前 2 次以确保它会触发多次)
  • 奇怪的是,如果我去掉下拉验证客户端代码并且不从下拉列表中选择任何内容,返回按钮就会起作用。如果我从下拉列表中选择一个项目,它不起作用:-/
【解决方案2】:

将其添加为单独的答案,因为它只是一大块与原始答案不完全相关的代码,但确实按预期工作。我把你给的代码从asp.net转换成基本的html,它确实工作正常,对你有用吗?

您可以尝试发布 asp.net 页面的输出而不是代码本身吗?也许按钮元素的 ID 上没有正确设置某些内容。

<html>
<head>

 <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.6.2.js" type="text/javascript"></script>
</head>
<body>
<div ID="Content1">
        <div ID="pnlForms">
            <fieldset>
                <legend>Your Information</legend>
                <ol>
                    <li>
                        <label for="ctl00_content_name">
                            Your Name:</label>
                        <textbox ID="Name" runat="server" Width="150px"></TextBox>
                        <em class="optional">Optional </em></li>
                    <li>
                        <label for="ctl00_content_status">
                            Your Affiliation:*</label>
                        <select ID="ddlAffilation" Width="155px">
                            <option Value="" Selected="True">--Select One--</option>
                            <option>F</option>
                            <option>S</option>
                            <option>T</option>
                        </select
                    </li>
                </ol>
            </fieldset>
            <div style="text-align: center;">
            <Button ID="Submit" Value="Submit" OnClick="submit_Click">Submit</Button></div>
        </div>
    <div id="Complete" style="display: none;">
        <div ID="pnlComplete">          
            <p>Thank you</p>
            <div style="text-align: center;">
            <Button ID="Return" Value="Return">Return</Button></div>
        </div>
    </div>
</div>
<div ID="Content3">
    <script type="text/javascript">
        $(document).ready(function () {
            $("#Submit").click(function (e) {
                if (IsValid() == false) {
                    e.preventDefault();
                    return false;
                }
                else {
                    $("#pnlForms").fadeOut('slow');
                    $("#Complete").delay(800).fadeIn('slow');
                }
            });
            $("#Return").click(function () {
                $("#Complete").fadeOut('slow');
                $("#pnlForms").delay(1000).fadeIn('slow');
            });
            function IsValid() {
                // Add any other validation in here
                if ($("#ddlAffilation").val() == "") {
                    return false;
                }
                return true;
            }
        });
    </script>
</div>
</body>
</html>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    相关资源
    最近更新 更多