我在 3 个事件上签署了表单,但事件“actioncomplete”未触发。另外两个事件执行完毕,执行成功回调。
if(obj instanceof Ext.form.BasicForm){
var before='beforeaction';
var complete='actioncomplete';
var error='actionfailed';
}
obj.addListener( before,
function(o,e) {
this.changeSysState(lang[msg_id].loading,'loading','load_N_'+this.load_id);
}, this);
obj.addListener( complete,
function(o,e) {
this.showStatus(lang[msg_id].complete,'complete','load_N_'+this.load_id);
obj.addListener( error,
function(o,e) {
this.changeSysState(lang[msg_id].error,'error','load_N_'+this.load_id);
}, this);
我的表格
var changePanel = new Ext.form.FormPanel({
labelWidth : 132,
layout : 'form',
border : false,
defaults:{allowBlank:false,width:165},
url : '/xstore/xstore_change_pass.php',
items : [ /*some fields*/ ]
});
提交通话
var form = changePanel.getForm();
form.submit({
success: function(r,o) {
winPass.destroy();
}
});
服务器返回
{"success":true}
使用ExtJs 3.4
最佳答案
有了这个响应,actioncomplete
应该被触发。您应该寻找原因。我发现您的代码存在一些问题,可能会导致此行为:
您将
before
、complete
、error
声明为局部变量,并且在范围之外使用它们;这可能是一个问题;使用它来代替:if(obj instanceof Ext.form.BasicForm){ var before='beforeaction'; var complete='actioncomplete'; var error='actionfailed'; obj.addListener( before, function(o,e) { this.changeSysState(lang[msg_id].loading,'loading','load_N_'+this.load_id); }, this); obj.addListener( complete, function(o,e) { this.showStatus(lang[msg_id].complete,'complete','load_N_'+this.load_id); }, this); obj.addListener( error, function(o,e) { this.changeSysState(lang[msg_id].error,'error','load_N_'+this.load_id); }, this); }
你在
成功
回调中销毁了一些东西;此success
回调在actioncomplete
之前触发,因此如果它也破坏了表单,则可能是另一个问题
如果这些都没有帮助,请检查开发人员工具中的服务器响应。可能会返回一些错误代码,这也可能是原因。
Here is fiddle您可以在其中看到第二个问题(actioncomplete
在销毁表单后未触发)。
关于javascript - 表单事件 'actioncomplete' 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20063849/