【问题标题】:onsubmit function wont fire while having a runat=server attribute具有 runat=server 属性时,onsubmit 函数不会触发
【发布时间】:2014-05-29 11:08:35
【问题描述】:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Register.aspx.cs" Inherits="Register" MasterPageFile="MasterPage.master" %>

<asp:Content ID="ContentPlaceHolder1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">


</asp:Content>

<asp:Content ID="ContentPlaceHolder2" ContentPlaceHolderID="ContentPlaceHolder2" Runat="Server">

<br />

<div id="signupform">

<form  class="signupform" name="formreg" runat="server" onsubmit="return valform()"> <br/>

<input dir="rtl" type="text" name="uname" class="uname"/> </br>

<input dir="rtl" type="text" name="fname" class="fname"/> </br>

<input dir="rtl" type="text" name="lname" class="lname"/> </br>

<input dir="rtl" type="password" name="pword" class="pword"/> </br>

<input dir="rtl" type="password" name="rpword" class="rpword"/> </br>

<input dir="rtl" type="text" name="mmail" class="mail"/> </br>

<input dir="rtl" type="text" name="rmail" class="rmail"/> </br>

<input dir="rtl" type="text" name="gil" class="gil"/> </br>

<input type="checkbox" name="anon" value="True" class="dropan"/></br>

<input type="submit" name="sub" class="subbutton" value=""/>

<%=registrationstatus %>
</form>

</div>

</asp:Content>

这是我的代码,我的问题是如果 runat="server" 属性存在,我的表单上的 onsubmit="return valform()" 属性不会触发,它们不能一起工作请帮助我我不知道为什么这两个属性不能一起工作

【问题讨论】:

  • 当表单为runat="server" 时,它会使用javascript:return WebForm_OnSubmit(); 值设置onsubmit 属性,显然它会覆盖您设置的值。你想用valform() 函数做什么?
  • 是的,请向我们展示 valform() 函数。
  • 您是否也在母版页上声明了另一个表单?
  • 是的,但它没有在服务器上运行

标签: c# javascript asp.net webforms


【解决方案1】:

这是因为您不能同时使用两者。正如文档中所说 -

<input type="text" id="Textbox1" runat="server">

这样做将使您在创建网页并将其发送到客户端之前以编程方式访问服务器上的 HTML 元素。 HTML 元素必须包含一个 id 属性。此属性用作元素的标识,使您能够通过元素的特定 ID 对元素进行编程。除此属性外,HTML 元素还必须包含 runat="server"。这告诉处理服务器该标签是在服务器上处理的,不应被视为传统的 HTML 元素。

这是参考。

http://msdn.microsoft.com/en-us/library/aa478973.aspx 在部分 - 使用 HTML 服务器控件

因此,带有run='server' 的 HTML 将不会被视为普通的 Html 元素,因此将始终由服务器处理。如果你想覆盖默认行为,你必须在浏览器中加载 html 后绑定你的 javascripts,可能是使用 jQuery 或类似的东西。使用 jQuery,这样的东西会有所帮助 -

$(function(){
    $("#formreg").submit(function(){
        return valform();
    });
});

【讨论】:

    【解决方案2】:

    通过检查您的代码,我得出结论,您可能在母版页上使用了另一个表单标签,并且没有 javascript 问题。母版页或内容页上只能存在一个表单标记(服务器端)。它们不能嵌套。当您在两个表单标签上使用 runat="Server" 属性时,会出现错误,说 "A page can have only one server-side Form tag"。所以从表单标签之一中删除runat="server" 属性,onsubmit 将开始触发。

    【讨论】:

      【解决方案3】:

      我用很简单的方法解决了。

      如果我们有这样的表格

      <form method="post" name="setting-form" >
         <input type="text" id="UserName" name="UserName" value="" 
            placeholder="user name" >
         <input type="password" id="Password" name="password" value="" placeholder="password" >
         <div id="remember" class="checkbox">
          <label>remember me</label>
          <asp:CheckBox ID="RememberMe" runat="server" />
         </div>
         <input type="submit" value="login" id="login-btn"/>
      </form>
      

      您现在可以在表单回发之前捕获该事件并停止回发并使用此 jquery 执行您想要的所有 ajax。

      $(document).ready(function () {
                  $("#login-btn").click(function (event) {
                      event.preventDefault();
                      alert("do what ever you want");
                  });
       });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-25
        • 1970-01-01
        • 1970-01-01
        • 2012-11-17
        • 2021-01-27
        • 1970-01-01
        相关资源
        最近更新 更多