【发布时间】:2013-09-08 13:44:05
【问题描述】:
我使用了来自http://struts.jgeppert.com/struts2-jquery-showcase/index.action 和http://code.google.com/p/struts2-jquery/wiki/Validation 的标准代码sn-p。
但是客户端和 ajax 服务器端验证不能一起工作。
问题是表单提交不会停止并且即使我们preventDefault 或执行其他操作也会调用操作。
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sj" uri="/struts-jquery-tags"%>
<html>
<head>
<sj:head jqueryui="true"/>
</head>
<body>
<div id="result">
<s:actionerror/>
<s:fielderror fieldName="name" value="eroor"></s:fielderror>
Submit form bellow.</div>
<!-- A List for Global Error Messages -->
<ul id="formerrors" class="errorMessage"></ul>
<s:form id="formValidateCustom" action="register1.action" namespace="/" theme="simple" cssClass="yform" >
<fieldset>
<legend>AJAX Form with Validation</legend>
<div class="type-text">
<label for="echo">User: <span id="loginuserError"></span></label>
<sj:textfield id="name" name="name" />
</div>
<div class="type-text">
<label for="echo">Password: <span id="loginpasswordError"></span></label>
<sj:textfield id="password" name="password" />
</div>
<div class="type-button">
<sj:submit
targets="result"
button="true"
validate="true"
validateFunction="customeValidation"
value="Submit"
onBeforeTopics="before"
timeout="2500"
indicator="indicator"
/>
</div>
</fieldset>
</s:form>
<script type="text/javascript">
function customeValidation(form, errors) {
//List for errors
// alert("in js");
var list = $('#formerrors');
//Handle non field errors
if (errors.errors) {
$.each(errors.errors, function(index, value) {
list.append('<li>'+value+'</li>\n');
});
}
//Handle field errors
if (errors.fieldErrors) {
$.each(errors.fieldErrors, function(index, value) {
var elem = $('#'+index);
if(elem)
{
alert(value[0]);
}
});
}
}
$.subscribe('before', function(event,data) {
var fData = event.originalEvent.formData;
alert('About to submit: \n\n' + fData[0].value + ' to target '+event.originalEvent.options.target+' with timeout '+event.originalEvent.options.timeout );
var form = event.originalEvent.form[0];
if (form.name.value.length < 2) {
alert('Please enter a value with min 2 characters');
**// the event does not stop here if we use ajax validation i.e validate = true, if we remove it then this works.**
event.originalEvent.options.submit = false;
}
});
</script>
</body>
</html>
如果我们使用 ajax 验证,即在提交按钮中使用 validate = true,则 event.originalEvenet.options.submit = false 不会在此处停止,如果我们将其删除,则此方法有效。**
【问题讨论】:
-
你检查了上面的链接,究竟是什么在那里不起作用?
-
它似乎按预期工作,但需要进行一些修改。也不确定它是实际运行的代码。
-
@AmolGhotankar 当然,它与客户端验证无关。
-
@RomanC - 是的,到达链接struts.jgeppert.com/struts2-jquery-showcase/index.action。转到表单菜单并选择“带有事件的表单”菜单。当我们在 sj:submit 中使用 validate="true" 时,$.subscribe('before' 和
-
我在groups.google.com/forum/#!topic/struts2-jquery/dkNnUeoUX3Q 上看到了 cmets - 客户端验证仅适用于 xhtml 主题,不适用于简单主题。无论如何要解决这个问题?
标签: javascript jquery validation struts2 struts2-jquery