【问题标题】:onsubmit event not working for asynchronous form submitonsubmit 事件不适用于异步表单提交
【发布时间】:2013-11-13 05:30:36
【问题描述】:

我已经使用 struts 标签创建了一个表单。我已经使用 struts jQuery 的提交标签异步提交了表单。现在,在我提交表单之前,我想调用一个 JavaScript 函数 checkUser(),它会检查是否存在一些客户端错误并阻止表单提交。带有JavaScript函数的表单如下:

<script type="text/javascript">
    function loadXMLDoc() {
        
        var xmlhttp;
        var k = document.getElementById("register_userDetails_username").value;
        
        var urls = "pass.jsp?ver=" + k;

        if (window.XMLHttpRequest) {
            xmlhttp = new XMLHttpRequest();
        } else {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState == 4) {
                document.getElementById("err1").innerHTML = xmlhttp.responseText;
            }
        };
        xmlhttp.open("GET", urls, true);
        xmlhttp.send();
    }
</script>
<script type="text/javascript">
      function checkuser() {
          alert("hi");  
            var i = document.getElementById('err1').innerHTML.search("Unavailable");
            alert(i);
            var j= document.getElementById('err1').innerHTML.search("Min length:8");
            alert(j);
            if (i!= -1 || j!=-1) {
                alert("hello");
                return false;
            } 
            alert("false");
            return false;
      } 
     
</script>


    
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sj" uri="/struts-jquery-tags"%>
<jsp:include page="menubar.jsp"></jsp:include>
<s:form action="register" method="post" theme="css_xhtml" cssClass="form1" style="margin:8px 211px" onsubmit="return checkuser()">
    <div class="searchHeader">Sign Up</div>  
    <div id="passwordMatchError">
        <s:property value="error"/>
    </div>
    <s:textfield label="Name" name="userDetails.name" maxlength="30"/>
    <s:textfield label="Username"  name="userDetails.username" onkeyup="loadXMLDoc()" maxlength="30">
        <div id="err1"></div>
    </s:textfield> 
    <s:password label="Password" name="userDetails.password" maxlength="45"/>
    <s:hidden name="userDetails.role" value='U' />
    <s:password name="confirmPassword" label="Confirm Password" maxlength="45"/>
    <s:radio label="Sex" name="userDetails.sex" list="#{'M':'Male','F':'Female'}" />
    <s:textfield label="Phone No" name="userDetails.phoneno" maxlength="10"/>
    <s:textfield label="E-mail" name="userDetails.email" maxlength="45"/>
    <div id="submitdivid"> 
        <sj:submit value="SUBMIT" cssClass="orangebuttonsmall" targets="mainContent" id="sas" />
    </div>
</s:form>

现在,当我在 db 中已经存在的用户名字段中输入一些值时,它会在 div 中显示字符串 Unavailable,id 为 err

在表单的onsubmit 事件中,我调用了checkuser 方法。但是对于sj:submitonsubmit 事件起作用。任何人都可以帮助我如何调用此onsubmit 工作我的目标是防止表单提交,如果在 div err 中存在字符串UnavailableMin Length:8。也接受任何替代解决方案。

【问题讨论】:

  • 你是如何处理这个事件的?
  • @RomanC 在触发此事件时我调用了 checkuser() 方法。在那里我检查了某些条件,当发现这些条件为真时,我想阻止表单提交。但是使用 sj:submit 标签,这个事件不起作用..
  • 您是否有证据表明该事件已被触发?而且我不明白什么不起作用:阻止表单提交或sj:submit标签。
  • @RomanC 问题是当我使用 sj:submit 标签时,不会触发 onsubmit 事件。
  • 那个标签没有这样的事件。

标签: javascript struts2 dom-events struts2-jquery struts2-jquery-plugin


【解决方案1】:

在头脑中:

<script type="text/javascript">
    $.subscribe('beforeSubmit', function(event,data) {
        event.originalEvent.options.submit = checkuser();          
    });
</script>

在你的标签中:

<sj:submit value = "SUBMIT" 
        cssClass = "orangebuttonsmall" 
         targets = "mainContent" 
              id = "sas" 
  onBeforeTopics = "beforeSubmit"
/>

【讨论】:

  • Onclick 事件适用于标签,但这不会阻止表单提交..
  • 如果您返回 false,则应该返回。至少,它适用于 ,不确定是否适用于
  • 是的,我同意。它适用于 s:submit。问题在于 sj:submit。它不适合它...
  • 我一直在重写答案;但是,完全未经测试的解决方案,请尝试让我知道。为避免混淆,请始终从您的函数中返回一个值。
  • @AndreaLigios:它不工作,表单正在提交!我正在使用 struts jquery 最新版本( 3.7.0 )。据我在code.google.com/p/struts2-jquery/issues/detail?id=1039 审查,此选项是一个建议,尚未实施
猜你喜欢
  • 2013-02-19
  • 2015-11-27
  • 1970-01-01
  • 1970-01-01
  • 2016-06-24
  • 2013-03-13
  • 1970-01-01
  • 2012-01-26
  • 2018-07-23
相关资源
最近更新 更多