Onsubmit函数在具有runat=server属性时不会触发

本文关键字:属性 server 函数 runat Onsubmit | 更新日期: 2023-09-27 18:05:47

<%@ 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>

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

Onsubmit函数在具有runat=server属性时不会触发

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

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

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

这是参考

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

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

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

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

我用很简单的方法解决了这个问题。

如果我们有这样的形式

<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");
            });
 });