代码插入数据库两次
Code inserting into database twice
我有表格
<aui:form action="<%= editURL %>" method="POST" name="fm">
<aui:fieldset>
<aui:input name="name" />
<aui:input name="url" />
<aui:input name="address" />
</aui:fieldset>
<aui:button-row>
<aui:button type="submit" />
<aui:button name="cancel" value="Cancel"/>
</aui:button-row>
</aui:form>
还有这段javascript代码,它两次插入数据库,我不知道为什么。
<aui:script use="aui-base,aui-form-validator,aui-io-request">
AUI().use('aui-base','aui-form-validator',function(A){
var rules = {
<portlet:namespace/>name: {
required: true
},
<portlet:namespace/>url: {
url: true
},
<portlet:namespace/>address: {
required: true
},
};
var fieldStrings = {
<portlet:namespace/>name: {
required: 'The Name field is required.'
},
<portlet:namespace/>address: {
required: 'The Address field is required.'
},
};
alert("validator");
new A.FormValidator({
boundingBox: '#<portlet:namespace/>fm',
fieldStrings: fieldStrings,
rules: rules,
showAllMessages:true,
on: {
validateField: function(event) {
},
validField: function(event) {
},
errorField: function(event) {
},
submitError: function(event) {
alert("submitError");
event.preventDefault(); //prevent form submit
},
submit: function(event) {
alert("Submit");
var A = AUI();
var url = '<%=editURL.toString()%>';
A.io.request(
url,
{
method: 'POST',
form: {id: '<portlet:namespace/>fm'},
on: {
success: function() {
alert("inside success");// not getting this alert.
Liferay.Util.getOpener().refreshPortlet();
Liferay.Util.getOpener().closePopup('popupId');
}
}
}
);
}
}
});
});
</aui:script>
但是,如果我添加以下代码,这是多余的,因为它已经存在于上述代码的submit block
中,并且由于我在表单中没有任何save
按钮而没有以任何方式触发,那么该值只插入一次。
<aui:script use="aui-base,aui-io-request">
A.one('#<portlet:namespace/>save').on('click', function(event) {
var A = AUI();
var url = '<%=editURL.toString()%>';
A.io.request(
url,
{
method: 'POST',
form: {id: '<portlet:namespace/>fm'},
on: {
success: function() {
Liferay.Util.getOpener().refreshPortlet();
Liferay.Util.getOpener().closePopup('popupId');
}
}
}
);
});
</aui:script>
这段代码生成Uncaught TypeError: Cannot read property 'on' of null
,我认为这是因为表单中没有save
按钮。但添加这段代码后,值只插入数据库一次,这正是我想要的,但逻辑有缺陷。如何仅通过使用第一段代码就可以得到我想要的结果?
插入发生了两次。一次来自CCD_ 5,另一次来自于CCD_。添加这段代码
<aui:script use="aui-base,aui-io-request">
A.one('#<portlet:namespace/>save').on('click', function(event) {
var A = AUI();
var url = '<%=editURL.toString()%>';
A.io.request(
url,
{
method: 'POST',
form: {id: '<portlet:namespace/>fm'},
on: {
success: function() {
Liferay.Util.getOpener().refreshPortlet();
Liferay.Util.getOpener().closePopup('popupId');
}
}
}
);
});
</aui:script>
导致仅插入一次。由于表单中没有save
按钮,因此该代码显然没有相关性。因此,有Uncaught TypeError: Cannot read property 'on' of null
掩盖了缺陷,阻止了表单提交两次。
删除上面的代码并阻止默认提交(通过在表单标记中添加onSubmit="event.preventDefault();
)解决了这个问题。
相关文章:
- Meteor Router数据函数被调用两次
- 从MySQL数据库中获取输入数据需要两次页面刷新
- Module.start()已激发两次
- Jquery点击事件必须点击两次
- Append元素在运行两次函数后不显示
- 防止双击执行两次jQuery post请求
- 我必须点击两次才能激活任何按钮操作(离子/角度)
- 单击jQuery会激发两次
- 如何避免在树上走两次
- 如何两次插入相同的html元素
- 如何一次插入两个表?准备好的发言
- 在单独的选项卡上插入两次内容脚本
- CKEditor插入<br/>按回车键两次
- jQuery虚拟键盘插件在Windows8触摸设备上两次插入相同的字符
- 代码插入数据库两次
- jQuery 1.8中的DOM插入导致javascript触发两次
- AngularJS向数据库插入数据两次
- 如何在一次插入两个值到数组使用JavaScript
- 使用JavaScript插入HTML元素两次(或两次以上)
- js日期选择器插入年份两次